真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

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

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

創(chuàng)新互聯(lián)建站長期為上千家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為潮州企業(yè)提供專業(yè)的成都做網站、成都網站設計,潮州網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

提升什么?

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

如下代碼:

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

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

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

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

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

包含函數(shù)聲明也會提升。

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

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

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

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

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

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

提升后:

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

提升后有一個變化,就是函數(shù)聲明會優(yōu)先于變量提升。

比如:

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

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

why ?

為什么需要提升?

有以下原因:

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

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

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

PS: ES6中 let const 不會被提升

到此,相信大家對“JavaScript作用域編寫提升的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!


本文名稱:JavaScript作用域編寫提升的方法是什么
文章出自:http://weahome.cn/article/gishhi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部