日期:2014-05-16  浏览次数:20464 次

求解答2个 JS 问题
var x = 'global'
function foo(f) {
   var x = 'foo';
   return f;
};
function foo2(){
var x = 'foo2';
return function() { alert([this.x,x])};
}
var bar = foo(function(){ alert([this.x,x])});
var bar2 = foo2();
bar(); //global  global
bar2(); //global  foo2 ????这里为什么是foo2?
这2个定义有什么区别??

var name = 'global';

var ff = {
'name': 'ff',
'say':function(greet){
return this.name + ' and ' + greet;
}
}
var fff = {
'name':'fff',
'method':function(){
return ff.say('method');
},
'method2':function (callback){
     return callback('method2');
    }
}
alert([fff.method(),fff.method2(ff.say),fff.method2(function(greet){return this.name + ' and ' + greet;})]); //这里谁解释后面2个函数调用this为什么指向window??

求解答~~~

------解决方案--------------------
foo2那个调用的是局部变量啊,后面那个你要搞清楚调用callback函数的是谁,是window吧,骚年
------解决方案--------------------
var bar = foo(function(){ alert([this.x,x])}); ==

function foo(f) {
       var oo = f;
   var x = 'foo';
   return oo;
};
f在x前面。


fff.method2(ff.say) 这样看就清楚。
var $a = ff.say;
var $x = $a('method');