亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

總結的內容感覺有點夸大匿名函數的作用

總結的內容感覺有點夸大,說“匿名函數可以有效的保證在頁面上寫入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的概念。


所以,恕我愚鈍,我實在不覺得匿名函數對防止全局變量污染有何作用?倒不是說匿名函數這樣寫不好,相反教程里的話也讓我大受啟發,只是對這個說法感覺有點牽強。


很感謝這篇教程,希望教主早點做完

正在回答

3 回答

意思是你把你自己的變量定義的立即執行的匿名函數中,這樣就不會與其他開發人員在全局定義的變量相混淆了

0 回復 有任何疑惑可以回復我~

函數運行在被定義的作用域中,而不是被執行的作用域中,本來就是把變量定義到作用域中去使用

1 回復 有任何疑惑可以回復我~

是在匿名函數里去聲明需要用到的局部變量,這樣的局部變量,匿名函數外面是不可以訪問的。你說的這個和人家想表達的完全不是一個意思啊。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

總結的內容感覺有點夸大匿名函數的作用

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號