成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JavaScript中的變量提升、作用域

wwq0327 / 1515人閱讀

摘要:即的變量提升此處變量未聲明時(shí)便可以使用,其實(shí)是因?yàn)闀?huì)自動(dòng)將聲明語(yǔ)句提升到頂部。但名字的初始化卻是按其在代碼中書(shū)寫(xiě)的順序進(jìn)行的,不受以上優(yōu)先級(jí)的影響。

變量提升(hoisting)

在JavaScript中,函數(shù)、變量的聲明都會(huì)被提升(hoisting)到該函數(shù)或變量所在的scope的頂部。即——JavaScript的變量提升.

var x = 5;    
alert(x);     // 5 
alert(y);     // undefined
var y = 7;    
alert(y);     // 7

此處變量y未聲明時(shí)便可以使用,其實(shí)是因?yàn)镴avaScript會(huì)自動(dòng)將聲明語(yǔ)句提升到頂部。
而第一次alert(y)時(shí)顯示undefined,說(shuō)明只提升了聲明,未提升賦值語(yǔ)句。等同于以下:

var y;
alert(y);    // undefined
y = 7;
alert(y);    // 7

javascript中一個(gè)名字(name)以四種方式進(jìn)入作用域(scope),其優(yōu)先級(jí)順序如下:

語(yǔ)言內(nèi)置:所有的作用域中都有 this 和 arguments 關(guān)鍵字;

形式參數(shù):函數(shù)的參數(shù)在函數(shù)作用域中都是有效的;

函數(shù)聲明:形如function foo() {};

變量聲明:形如var bar;

名字聲明的優(yōu)先級(jí)如上所示。也就是說(shuō)如果一個(gè)變量的名字與函數(shù)的名字相同,那么函數(shù)的名字會(huì)覆蓋變量的名字,無(wú)論其在代碼中的順序如何。但名字的初始化卻是按其在代碼中書(shū)寫(xiě)的順序進(jìn)行的,不受以上優(yōu)先級(jí)的影響??创a:

(function(){
    var foo;
    console.log(typeof foo);  //function
     
    function foo(){}
 
    foo = "foo";
    console.log(typeof foo);  //string
    
    var foo;
})();
function test() {
    foo();             // TypeError "foo is not a function"
    bar();             // "this will run!"
    var foo = function () { // function expression assigned to local variable "foo"
        alert("this won"t run!");
    }
    function bar() {   // function declaration, given the name "bar"
        alert("this will run!");
    }
}
test();

函數(shù)表達(dá)式的聲明:

foo(); // TypeError "foo is not a function"
bar(); // valid
baz(); // TypeError "baz is not a function"
spam(); // ReferenceError "spam is not defined"

var foo = function () {}; // anonymous function expression ("foo" gets hoisted)
function bar() {}; // function declaration ("bar" and the function body get hoisted)
var baz = function spam() {}; // named function expression (only "baz" gets hoisted)

foo(); // valid
bar(); // valid
baz(); // valid
spam(); // ReferenceError "spam is not defined"
JavaScript中的作用域

JavaScript中運(yùn)行以下代碼我們會(huì)發(fā)現(xiàn),i為10?

for (var i = 0; i < 10; i++) {
    // some code
}
return i;      //10

在如Java、C、C++等其他語(yǔ)言中,作用域一般為for語(yǔ)句、if語(yǔ)句或{}內(nèi)的一塊區(qū)域,稱為塊級(jí)區(qū)域(block-level scope);
而在JavaScript中,作用域則是函數(shù)域(function-level scope).

var x = 1;
console.log(x);     // 1
if (true) {
    var x = 2;
    console.log(x); // 2
}
console.log(x);     // 2

function foo() {
var x = 1;
if (x) {
    (function () {
        var x = 2;
        // some other code
    }());
}
console.log(x);     // x is still 1.
}

    var foo = 1;
function bar() {
    if (!foo) {     // 由于var foo被提升,此處foo為undefined,進(jìn)入if
        var foo = 10;
    }
    alert(foo);     // 10
}
bar();

var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);          // 1



引用自:JavaScript Scoping and Hoisting--written by ben cherry

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79759.html

相關(guān)文章

  • ES6 變量作用提升變量的生命周期詳解

    摘要:不同的是函數(shù)體并不會(huì)再被提升至函數(shù)作用域頭部,而僅會(huì)被提升到塊級(jí)作用域頭部避免全局變量在計(jì)算機(jī)編程中,全局變量指的是在所有作用域中都能訪問(wèn)的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現(xiàn)代 JavaScript 開(kāi)發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文詳細(xì)討論了 JavaScript 中作用域、執(zhí)行上下文、不同作用域下變量提升與函數(shù)提升的表現(xiàn)、頂層對(duì)象以及如何避免創(chuàng)建...

    lmxdawn 評(píng)論0 收藏0
  • 關(guān)于javascript中的作用作用

    摘要:作用域的類別可以影響到變量的取值,分為詞法作用域靜態(tài)作用域和動(dòng)態(tài)作用域。而,采用的就是詞法作用域,或者叫靜態(tài)作用域。 關(guān)于javascript中的作用域和作用域鏈 我GitHub上的菜鳥(niǎo)倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 前面的文章說(shuō)到, 執(zhí)行上下文的創(chuàng)建階段,主要有三個(gè)內(nèi)容: ? ? ? ? 1、創(chuàng)建變量對(duì)象;2、初始化作用域...

    lcodecorex 評(píng)論0 收藏0
  • 作用提升

    摘要:在當(dāng)中,只存在函數(shù)作用域和全局作用域,而塊級(jí)作用域是不存在的。作用域中作用域分為兩種,分別是全局作用域函數(shù)作用域其中全局作用域指的是在一個(gè)文件中的作用域。 JavaScript中和C語(yǔ)言、Java這些語(yǔ)言不一樣。在JavaScript當(dāng)中,只存在函數(shù)作用域和全局作用域,而塊級(jí)作用域是不存在的。剛剛接觸JavaScript的話往往不知道這一點(diǎn),所以很容易因?yàn)檫@一點(diǎn)在程序中出錯(cuò)。 作用域 ...

    idisfkj 評(píng)論0 收藏0
  • 【譯】理解JavaScript作用

    摘要:作用域是代碼的不同部分在運(yùn)行期間的可見(jiàn)性。大多數(shù)開(kāi)發(fā)者想當(dāng)然地理解作用域,但毫無(wú)疑問(wèn),有它自己的說(shuō)明。變量可能是全局作用域的,或者是方法作用域的??偠灾?,不要重復(fù)聲明變量,使用良好命名,盡力避免在聲明前調(diào)用和執(zhí)行任何東西。 原文鏈接:https://hackernoon.com/unders... 什么是作用域? 就像JavaScript中的其他東西一樣,作用域并無(wú)特別之處。盡管大多...

    betacat 評(píng)論0 收藏0
  • ES2015系列--塊級(jí)作用

    摘要:在的閉包中,閉包函數(shù)能夠訪問(wèn)到包庇函數(shù)中的變量,這些閉包函數(shù)能夠訪問(wèn)到的變量也因此被稱為自由變量。在之前最常見(jiàn)的兩種作用域,全局作用局和函數(shù)作用域局部作用域。 關(guān)于文章討論請(qǐng)?jiān)L問(wèn):https://github.com/Jocs/jocs.... 當(dāng)Brendan Eich在1995年設(shè)計(jì)JavaScript第一個(gè)版本的時(shí)候,考慮的不是很周到,以至于最初版本的JavaScript有很多不...

    darkbug 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<