foo2那个调用的是局部变量啊,后面那个你要搞清楚调用callback函数的是谁,是window吧,骚年
解决方案 »
- javascript void 0 怎么解决
- 我想要实现在线报价的功能
- 简单的
- 客户端如何读取session值?
- 如何用js来控制文本框中的内容
- 如何调用iframe里的js方法?谢谢
- window.open()总是弹出一个新的窗口,如何对弹出的新窗口进行判断,如果它存在就刷新,如果不存在才弹出?
- 如何实现光标离开某一个输入框式判断是否是数字?
- Cannot set property 'onmouseover' of null
- 求大佬帮忙看看script里面写的img网络地址怎么刷不出来图片
- ext中get getDom getCmp 的区别
- cookie方法应该普通jquery都支持吧?为什我这个没反应?
var oo = f;
var x = 'foo';
return oo;
};
f在x前面。
fff.method2(ff.say) 这样看就清楚。
var $a = ff.say;
var $x = $a('method');
第2个问题就是如LS说的那样!!我刚开始弄混了。callback = ff.say;
callback(),ff.say().其实callback就是一个匿名函数~匿名函数调用的this当然指向window~。
方法里的this要是不想指向window就得用function.call(_this)来调用
foo返回的函数即变量bar是在全局中定义的 是个全局函数: bar在弹出x时 先在自身函数内找,结果找不到然后接着就往全局找,结果在全局找到x即字符串“global”。
foo2返回的函数即bar2是在foo2内定义的,是局部函数:bar2在弹出x时 同样先在函数本身内找,没有找到后再在foo2内找,如果在foo2内找不到的话会继续向上在全局里找,但是在foo2中找到了x(‘foo2’),所以立即弹出不再向上查找。(2)先说“fff.method2(function(greet){return this.name + ' and ' + greet;})])”:
这个函数(红色部分)和上面的bar一样是在全局定义的,是个全局函数,只要是全局函数,那么函数中的this就会指向window。再说“fff.method2(ff.say)”:
函数中的this指向取决于它是如何被调用的,一定要注意“调用”这两个字。
“ff.say()”这叫做调用,此时say函数作为ff的方法调用,this当然是指向ff,也就会弹出“ff”。
但是在“fff.method2(ff.say)”中不是ff.say()而是“ff.say”。
ff.say是调用吗?不是!它只是一个函数,而且它最终传入fff.method中以callback的身份被调用(callback('method')),而不是像“ff.say()”一样作为ff的方法被调用,对于对象方法而言如果作为对象方法调用那么它的this就会指向window(同上,因为它是在全局定义的),所以最终ff.say这个函数再最终调用时this指向了window。楼主可以google一下作用域的相关知识~~~ps:码字也挺辛苦的~~顿时觉得这分儿少了点~~~