總結(jié)的內(nèi)容感覺有點夸大匿名函數(shù)的作用
總結(jié)的內(nèi)容感覺有點夸大,說“匿名函數(shù)可以有效的保證在頁面上寫入JavaScript,而不會造成全局變量的污染”我覺得有點故弄玄虛,我認(rèn)為防止全局變量污染是定義函數(shù)和調(diào)用函數(shù)時考慮,而不是使用匿名函數(shù)。
其實js的函數(shù)定義和調(diào)用就是兩句話,這兩句也是closure和callback的核心
1、函數(shù)定義時決定了這個函數(shù)所綁定的scope chain,但這個scope chain里的變量是活的;
2、函數(shù)調(diào)用時決定了使用scope chain里參數(shù)使用什么值。
例如下面這段代碼
function?fn1(cb){ var?fn1_var?=?"callback"; cb(); } function?fn2(){ function?cb(){ console.log(fn1_var); } fn1(cb); } fn2();?//what's?print?in?console?
執(zhí)行后臺會打印什么?如果你還認(rèn)為是"callback"就再想想我上面的話,呵呵。
從這個例子也可以看出,不使用匿名函數(shù),函數(shù)cb在執(zhí)行時也訪問不到fn1函數(shù)中定義的變量,但即使無論你如何用匿名函數(shù),例如下面:
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的概念。
所以,恕我愚鈍,我實在不覺得匿名函數(shù)對防止全局變量污染有何作用?倒不是說匿名函數(shù)這樣寫不好,相反教程里的話也讓我大受啟發(fā),只是對這個說法感覺有點牽強。
很感謝這篇教程,希望教主早點做完
2019-03-14
意思是你把你自己的變量定義的立即執(zhí)行的匿名函數(shù)中,這樣就不會與其他開發(fā)人員在全局定義的變量相混淆了
2017-04-13
函數(shù)運行在被定義的作用域中,而不是被執(zhí)行的作用域中,本來就是把變量定義到作用域中去使用
2014-12-07
是在匿名函數(shù)里去聲明需要用到的局部變量,這樣的局部變量,匿名函數(shù)外面是不可以訪問的。你說的這個和人家想表達(dá)的完全不是一個意思啊。