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

資訊專欄INFORMATION COLUMN

函數(shù)&作用域提升

stormgens / 2528人閱讀

摘要:立即執(zhí)行函數(shù)表達(dá)式輸出綁定在函數(shù)表達(dá)式自身的函數(shù)中而不是所在作用域,使值為的變量只能在內(nèi)被訪問。且變量名不會污染外部作用域。作用域執(zhí)行一個非法操作來制造異常說明僅存在分句內(nèi)部。且,函數(shù)聲明可覆蓋。

立即執(zhí)行函數(shù)表達(dá)式(IIFE)

var a = 2;
(function foo() {
  var a = 3;
  console.log(a);//3
})();//IIFE
console.log(a);//2

輸出:3 2
foo綁定在函數(shù)表達(dá)式自身的函數(shù)中而不是所在作用域,使值為3的變量a只能在{..}內(nèi)被訪問。 且foo變量名不會污染外部作用域。

var a=2;
(function IIFE(global) {//參數(shù)名為global
  var a=3;
  console.log(a);//3
  console.log(global.a);//2
})(window);//將window對象的引用傳遞進(jìn)去
console.log(a);//2

輸出:3 2 2
立即執(zhí)行函數(shù)表達(dá)式的傳參版本。

//倒置代碼運(yùn)行順序
var a=2;
(function iife(def) {
  def(window);
})(function def(global) {
  var a=3;
  console.log(a);//3
  console.log(global.a);//2
});
console.log(a);

輸出:3 2 2
同上。

作用域

try {
  undefined();//執(zhí)行一個非法操作來制造異常
} catch(err) {
  console.log(err);//TypeError: undefined is not a function
}
console.log(err);//Uncaught ReferenceError: err is not defined

說明:err僅存在catch分句內(nèi)部。

var foo=true;
if(foo) {
  let bar=foo*2;
  var b = foo*3;
  console.log(b);
  console.log(bar);
}
console.log(b);
console.log(bar);

輸出:
3
2
3
Uncaught ReferenceError: bar is not defined
let關(guān)鍵字將變量綁定到所在作用域,所以在全局作用域找不到變量bar。

for(var i=0; i<10; ++i) {
  console.log(i);
}
console.log(i);

輸出:1 2 3 4 5 6 7 8 9 10

for(let i=0; i<10; ++i) {
  console.log(i);
}
console.log(i);

輸出:1 2 3 4 5 6 7 8 9 Uncaught ReferenceError: i is not defined

var foo=true;
if(foo) {
  var a=2;
  const b=3;
  console.log(a);
  console.log(b);
  a=3;
  b=4;
}
console.log(a);
console.log(b);

輸出:2 3 Uncaught TypeError: Assignment to constant variable.
在為b賦值時直接報錯,因?yàn)閏onst的值是固定的,試圖修改會引起錯誤。

如果將b=4;注釋掉,則
輸出:2 3 3 Uncaught ReferenceError: b is not defined
constlet一樣,將變量綁定到所在作用域。

作用域提升

總結(jié):變量和函數(shù)聲明被提升到最上面,函數(shù)表達(dá)式不會被提升。

a=2;
var a;
console.log(a);
console.log(b);
var b=2;
/*以上代碼相當(dāng)于
var a;
var b;
a=2;
console.log(a);
console.log(b);
b=2;*/

輸出:2 undefined
var a;定義聲明編譯 階段進(jìn)行
a=2;賦值聲明在原地等待 執(zhí)行 階段
變量a的定義聲明var a;被提升到最上面,即 a=2 之前,所以沒有報錯undefined.

foo();//1
var foo;
function foo() {
  console.log(1);
}
foo=function() {
  console.log(2);
}
/*以上代碼相當(dāng)于
function foo() {
 console.log(1);
}
foo();
foo=function() {
 console.log(2);
}

輸出:1
函數(shù)foo的聲明var foo;被提升到最上面。
注:函數(shù)首先被提升,然后是變量。且,函數(shù)聲明可覆蓋。

代碼引用自《你不知道的JavaScript》系列,部分有更改。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/101759.html

相關(guān)文章

  • JS中l(wèi)et與const命令如何使用

      本篇文章主要講述JS中l(wèi)et與const命令使用,通過代碼展示給各位。  let命令  基本使用  在ES6中,let命令是新增的聲明變量,與var的差異在于let無法重復(fù)聲明,且let有效只是在其命令的代碼塊內(nèi),let禁止變量出現(xiàn)變量提升現(xiàn)象,let的特點(diǎn)就是通過暫時性死區(qū)的方式來避免程序上的錯誤  代碼塊:使用{}包括起來的內(nèi)容  聲明變量:分配一個存儲空間  不可重復(fù)聲明:let聲明過后...

    3403771864 評論0 收藏0
  • ES6筆記之 let &amp;&amp; const

    摘要:聲明的變量只在其所在的代碼塊內(nèi)有效。只要在聲明之前使用這些變量,就會報錯。在語法上稱為暫時性死區(qū)有時候,會不經(jīng)間遇到比較隱蔽的死區(qū),不太容易被發(fā)現(xiàn)。不允許重復(fù)聲明不允許在相同的作用域內(nèi)聲明同一個變量。一旦聲明,其值就不能再改變。 let && const let let聲明的變量只在其所在的代碼塊內(nèi)有效。 { let a = 10; } console.log(a) //R...

    aristark 評論0 收藏0
  • 詳解Javascript的作用作用鏈以及閉包

      一、我們先說說javascript的作用域  ①全局變量-函數(shù)體外部進(jìn)行聲明  ②局部變量-函數(shù)體內(nèi)部進(jìn)行聲明  1)函數(shù)級作用域  javascript語言中局部變量不同于C#、Java等高級語言,在這些高級語言內(nèi)部,采用的塊級作用域中會聲明新的變量,這些變量不會影響到外部作用域。  而javascript則采用的是函數(shù)級作用域,也就是說js創(chuàng)建作用域的單位是函數(shù)。  例如:  在C#當(dāng)中我...

    3403771864 評論0 收藏0
  • es6必會之let &amp;&amp; const

    摘要:副作用,無副作用可執(zhí)行和關(guān)鍵詞。和不能像一樣同一個下聲明多次和不會像一樣變量聲明提升原因是,存在因此不能,賦值前使用變量。 showImg(https://segmentfault.com/img/bVbhPlD?w=1271&h=715); 關(guān)鍵詞: let ,const, blocking scope ,temporal dead zone,redeclaration,reassi...

    ygyooo 評論0 收藏0
  • const &amp; let

    摘要:前世在還未出現(xiàn)前,的世界一直是的統(tǒng)治在中用于變量聲明的關(guān)鍵字。的出現(xiàn)給帶來了塊級作用域,解決了變量提升,禁止了重復(fù)聲明變量,讓少了很多疑惑的地方。時代已經(jīng)過去了,各種特性用起來。 前世 在 const & let 還未出現(xiàn)前,JS 的世界一直是 var的統(tǒng)治 var:在JS中用于變量聲明的關(guān)鍵字。 特點(diǎn): 變量提升 只有函數(shù)作用域或者全局作用域,沒有塊級作用域 重復(fù)聲明變量 循環(huán)體重...

    or0fun 評論0 收藏0

發(fā)表評論

0條評論

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