Kursk_ye
2014-11-12 16:28
总结的内容感觉有点夸大,说“匿名函数可以有效的保证在页面上写入JavaScript,而不会造成全局变量的污染”我觉得有点故弄玄虚,我认为防止全局变量污染是定义函数和调用函数时考虑,而不是使用匿名函数。
其实js的函数定义和调用就是两句话,这两句也是closure和callback的核心
1、函数定义时决定了这个函数所绑定的scope chain,但这个scope chain里的变量是活的;
2、函数调用时决定了使用scope chain里参数使用什么值。
例如下面这段代码
function fn1(cb){ var fn1_var = "callback"; cb(); } function fn2(){ function cb(){ console.log(fn1_var); } fn1(cb); } fn2(); //what's print in console?
执行后台会打印什么?如果你还认为是"callback"就再想想我上面的话,呵呵。
从这个例子也可以看出,不使用匿名函数,函数cb在执行时也访问不到fn1函数中定义的变量,但即使无论你如何用匿名函数,例如下面:
var g ="global"; function fn1(cb){ var fn1_var = "callback"; (function(){cb();})(); } function fn2(){ function cb(){ console.log(g); } fn1(cb); } fn2(); //what's print in console?
都必然可以访问到g这个变量,这就是javascript中scope chain的概念。
所以,恕我愚钝,我实在不觉得匿名函数对防止全局变量污染有何作用?倒不是说匿名函数这样写不好,相反教程里的话也让我大受启发,只是对这个说法感觉有点牵强。
很感谢这篇教程,希望教主早点做完
意思是你把你自己的变量定义的立即执行的匿名函数中,这样就不会与其他开发人员在全局定义的变量相混淆了
函数运行在被定义的作用域中,而不是被执行的作用域中,本来就是把变量定义到作用域中去使用
是在匿名函数里去声明需要用到的局部变量,这样的局部变量,匿名函数外面是不可以访问的。你说的这个和人家想表达的完全不是一个意思啊。
jQuery源码解析(架构与依赖模块)
84047 学习 · 280 问题
相似问题