国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript中的變量提升、作用域

wwq0327 / 1439人閱讀

摘要:即的變量提升此處變量未聲明時便可以使用,其實是因為會自動將聲明語句提升到頂部。但名字的初始化卻是按其在代碼中書寫的順序進行的,不受以上優(yōu)先級的影響。

變量提升(hoisting)

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

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

此處變量y未聲明時便可以使用,其實是因為JavaScript會自動將聲明語句提升到頂部。
而第一次alert(y)時顯示undefined,說明只提升了聲明,未提升賦值語句。等同于以下:

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

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

語言內置:所有的作用域中都有 this 和 arguments 關鍵字;

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

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

變量聲明:形如var bar;

名字聲明的優(yōu)先級如上所示。也就是說如果一個變量的名字與函數(shù)的名字相同,那么函數(shù)的名字會覆蓋變量的名字,無論其在代碼中的順序如何。但名字的初始化卻是按其在代碼中書寫的順序進行的,不受以上優(yōu)先級的影響。看代碼:

(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ù)表達式的聲明:

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中運行以下代碼我們會發(fā)現(xiàn),i為10?

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

在如Java、C、C++等其他語言中,作用域一般為for語句、if語句或{}內的一塊區(qū)域,稱為塊級區(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,進入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

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79759.html

相關文章

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

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

    lmxdawn 評論0 收藏0
  • 關于javascript中的作用作用

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

    lcodecorex 評論0 收藏0
  • 作用提升

    摘要:在當中,只存在函數(shù)作用域和全局作用域,而塊級作用域是不存在的。作用域中作用域分為兩種,分別是全局作用域函數(shù)作用域其中全局作用域指的是在一個文件中的作用域。 JavaScript中和C語言、Java這些語言不一樣。在JavaScript當中,只存在函數(shù)作用域和全局作用域,而塊級作用域是不存在的。剛剛接觸JavaScript的話往往不知道這一點,所以很容易因為這一點在程序中出錯。 作用域 ...

    idisfkj 評論0 收藏0
  • 【譯】理解JavaScript作用

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

    betacat 評論0 收藏0
  • ES2015系列--塊級作用

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

    darkbug 評論0 收藏0

發(fā)表評論

0條評論

wwq0327

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<