亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

javascript - js的作用域問題?
phpcn_u1582
phpcn_u1582 2017-06-26 10:50:34
0
4
784
var b = 10;
(function b(){
    b = 20;
    console.log(b);
})();

為什麼結(jié)果會(huì)輸出函數(shù),還有想問下括號(hào)裡面的這個(gè)b函數(shù)有函數(shù)提升嗎

phpcn_u1582
phpcn_u1582

全部回覆(4)
扔個(gè)三星炸死你

在函數(shù)表達(dá)式裡函數(shù)名是不可變的,只能引用,不能賦值。如果你加上 'use strict' 在 strict mode 下就可以觀察到報(bào)錯(cuò)。

阿神

@輕鍵快碼 10 後面需要加分號(hào)

這裡不存在函數(shù)提升,函數(shù)提升只存在於「函數(shù)宣告」的情況,而不存在於「函數(shù)表達(dá)式的」的情況。
關(guān)於「函數(shù)宣告」和「函數(shù)表達(dá)式」的差別,網(wǎng)路上很多文章講的很清楚了,可以自己搜尋學(xué)習(xí)。

學(xué)霸

2樓說的意思是,在一個(gè)函數(shù)裡面修改它的函數(shù)名稱是不能實(shí)現(xiàn)的,比如說:

(function a(){
    a = 10; //這個(gè)表達(dá)式不會(huì)成功,函數(shù)a依舊是函數(shù)a,至于這里面的a = 10等同于被廢棄了,也不會(huì)生成相應(yīng)的全局變量
})();

至於為什麼輸出的是函數(shù)a而不是20,簡(jiǎn)單點(diǎn)就是那個(gè)語句直接被略過了,等同於

var b = 10;
(function b(){
    console.log(b);
})();

補(bǔ)充:
剛剛被人提醒了,自執(zhí)行函數(shù)也是屬於函數(shù)表達(dá)式,開始寫答案的時(shí)候給了誤導(dǎo)很抱歉。

var b = 10; 
var b = (function(){ 
    b = 10; 
    console.log(b); //輸出:10
})(); 
console.log(b); //輸出:undefined 。 b在自執(zhí)行函數(shù)那里沒有獲取到返回值
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板