中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript作用域編寫提升的方法是什么

發布時間:2021-11-06 14:05:04 來源:億速云 閱讀:150 作者:iii 欄目:web開發

本篇內容主要講解“JavaScript作用域編寫提升的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JavaScript作用域編寫提升的方法是什么”吧!

提升什么?

把變量與函數的聲明移到編寫所處作用域的最上面,叫作提升。

如下代碼:

console.log(name); // undefined
var name = 'Rewa Fang';
console.log(name); // Rewa Fang

第一次打印name時,輸出undefined而不是拋出異常ReferenceError。 正是因為變量name聲明被提升了。 但只提升聲明,賦值不會提升;所以輸出undefined。 第二次打印時,name已經被賦值為Rewa Fang

提升后的代碼:

var name;
console.log(name); // undefined
name = 'Rewa Fang';
console.log(name); // Rewa Fang

代碼改成下面這種寫法也是可正常執行的:

name = 'Rewa Fang';
console.log(name); // Rewa Fang 
var name;

var name; 會被提升到最上面。

這是因為編譯器在編譯階段會找到代碼中所有的聲明,并綁定在對應的作用域中。而賦值和其它邏輯代碼會留在原地;等待執行。 比如: var a = 1; 會被編譯器看作兩個部分聲明var a;和賦值a = 1; ,那么聲明會提升到作用域最上面,賦值則在原地等執行。

包含函數聲明也會提升。

函數聲明提升
sayHi(); // Hello!
function sayHi(){
    console.log('Hello!');
}

函數sayHi()可以正常執行;因為函數聲明的部分被提升了。提升為:

function sayHi(){
    console.log('Hello!');
}
sayHi(); // Hello!

函數內部的變量和函數也會提升至函數最上面:

var name = 'Lebron James';
sayHi(); // Hello! Rewa Fang
function sayHi(){
    name = 'Rewa Fang';
    console.log('Hello! '+name);
    var name;
}

函數內的name會提升至函數創建的作用域最上面,所以函數內部不會引用到外部name。 內部的name遮蔽了外部變量name。

提升后:

function sayHi(){
    var name;
    name = 'Rewa Fang';
    console.log('Hello! '+name);
}
var name;
name = 'Lebron James';
sayHi(); // Hello! Rewa Fang

提升后有一個變化,就是函數聲明會優先于變量提升。

比如:

console.log(sayHi);
var sayHi = 'Lebron James';
function sayHi(){
    console.log('Hello! ');
}

結果會輸出:? sayHi(){console.log('Hello! ');} node環境下輸出:[Function: sayHi]

why ?

為什么需要提升?

有以下原因:

  • 優化性能; 編譯器在代碼運行前進行編譯會預先處理變量和函數的聲明,統一管理作用域。保持代碼由上而下的順序變量在引用之前聲明。 不過代碼的順序是可以人為控制的,像Java不需要提升開發者可以有效地管理好變量的聲明。 所以這可能并不是最重要的提升原因,也可能是個歷史遺留問題。

  • 函數間的相互調用; 如下代碼,如果函數b沒有提升; 函數a中調用就會拋出異常;提升就可以讓函數式編程變得更靈活。

     function a (){
        var a = 1;
         return b(a);
     }
     function b(num){
        return num * 2;
     }

PS: ES6中 let const 不會被提升

到此,相信大家對“JavaScript作用域編寫提升的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乳源| 历史| 肇州县| 故城县| 金湖县| 沅陵县| 玛曲县| 邢台市| 来安县| 虞城县| 湘阴县| 大田县| 海盐县| 宜兴市| 高碑店市| 连云港市| 新昌县| 紫阳县| 武鸣县| 龙口市| 叶城县| 信阳市| 天水市| 湟中县| 霞浦县| 乌苏市| 新巴尔虎左旗| 昂仁县| 灯塔市| 华容县| 葵青区| 新乡市| 新宁县| 炉霍县| 潞城市| 康平县| 中山市| 中方县| 桃江县| 龙门县| 通城县|