87,907
社区成员
发帖
与我相关
我的任务
分享
var foo = function(a){
eval(a);
}
foo("return;");
var global = "global";
var foo = function(a){
eval(a);
}
foo("var global = 'local'");
alert(global);
function getFunction(name){
function getName(){
return name;
}
return getName;
}
var a = getFunction("zhang"),
b = getFunction("ling");
console.log(a == b); //?
console.log(a()); //?
console.log(b()); //?
function bindFn(fn){
return fn();
}
var name = "ling",
obj = {
name:"zhang",
sayName:function(){
return function(){
return this.name;
}
}
},
sayName = obj.sayName;
console.log(obj.sayName()()); //?
console.log(sayName()()); //?
console.log(sayName.call(obj)());//?
var a = bindFn(obj.sayName),
b = bindFn(sayName);
console.log(a()); //?
console.log(b()); //?
function bindFn(fn){
return fn();
}
var name = "ling",
obj = {
name:"zhang",
sayName:function(){
var name = this.name;
return function(){
return name;
}
}
},
sayName = obj.sayName;
console.log(obj.sayName()()); //?
console.log(sayName()()); //?
console.log(sayName.call(obj)());//?
var a = bindFn(obj.sayName),
b = bindFn(sayName);
console.log(a()); //?
console.log(b()); //?
只想了这么一点点,所以,有兴趣,可以试着看看~~
var foo = function(a){
eval(a);
}
foo("var a = function(){return 2;}();alert(a);");
//return是关键字,只能出现在function的内容部,
//而eval传入的是一个字符串,如果你想要在eval传入的字符串中使用return,那么就必须有一个一个函数的字符串的形式,我这么理解。
foo("alert(this)");
//而且eval也没有什么上下文的概念吧?既然说到上下文,那么就要访问到eval的内部this属性,可是,eval的内部this,可以访问到吗?
//或者说,像eval,alert,这些都是定义在window对象下的顶级函数,它们内部的this指向(也就是上下文),和定义在哪,是没有关系的,只和你怎么使用有关。
//所以,这样定义一下,能理解吗?
var b = {foo : foo};
b.foo("alert(this)");
//或者,使用自定义的方法:
function aa(){
alert(this);
}
//这里的this,就是指向window的
aa();
var bb = {
aa:aa
};
bb.aa();
//这里的this就是指向bb对象的。
之前有总结过一点关于this指向东西,仅供参考:
函数中this的指向-简单认识var global = "global";
var foo = function(a){
eval(a);
}
foo("global = 'local'");
//不要添加var ,在函数内部使用var定义,就呗定义成局部变量了。
alert(global);