总结的内容感觉有点夸大匿名函数的作用
总结的内容感觉有点夸大,说“匿名函数可以有效的保证在页面上写入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的概念。
所以,恕我愚钝,我实在不觉得匿名函数对防止全局变量污染有何作用?倒不是说匿名函数这样写不好,相反教程里的话也让我大受启发,只是对这个说法感觉有点牵强。
很感谢这篇教程,希望教主早点做完