国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript變量提升和閉包理解

2024-05-06 15:20:49
字體:
來源:轉載
供稿:網友

我們先來看一個題目:

<script> console.log(typeof a)//undefined var a='littlebear'; console.log(a)//littlebear </script><script> console.log(typeof a)//string var a=1; console.log(a)//1</script>

第一個script里可以看出var a 被提升到頂部,a = 'littlebear'被保留在原地。

第二個script,之所以不先打印undefined ,是因為a在上面已經被var聲明過,所以var a不會再次被提升。

再看一個題目:

<script>  console.log(a)//function a(){}  var a=1;  console.log(a)//1  function a(){}  console.log(a)//1</script>

可以看到function a(){}被提升到最頂端。說明函數的提升變量的提升

1.變量提升

在ES6之前,JavaScript沒有塊級作用域(一對花括號{}即為一個塊級作用域),只有全局作
用域和函數作用域。變量提升即將變量聲明提升到它所在作用域的最開始的部分。
上個簡歷的例子如:

console.log(global); // undefinedvar global = 'global';console.log(global); // globalfunction fn () {  console.log(a); // undefined  var a = 'aaa';  console.log(a); // aaa}fn();

之所以會是以上的打印結果,是由于js的變量提升,實際上上面的代碼是按照以下來執行的:

var global; // 變量提升,全局作用域范圍內,此時只是聲明,并沒有賦值console.log(global); // undefinedglobal = 'global'; // 此時才賦值console.log(global); // 打印出global function fn () {  var a; // 變量提升,函數作用域范圍內  console.log(a);  a = 'aaa';  console.log(a);}fn();

2.函數提升

js中創建函數有兩種方式:函數聲明式和函數字面量式。只有函數聲明才存在函數提升!如:

console.log(f1); // function f1() {}  console.log(f2); // undefined function f1() {}var f2 = function() {}

之所以會有以上的打印結果,是由于js中的函數提升導致代碼實際上是按照以下來執行的:

function f1() {} // 函數提升,整個代碼塊提升到文件的最開始console.log(f1);  console.log(f2);  var f2 = function() {}

3.什么是閉包

閉包是有權訪問另一個函數作用域的變量的函數。

簡單的說,Javascript允許使用內部函數---即函數定義和函數表達式位于另一個函數的函數體內。而且,這些內部函數可以訪問它們所在的外部函數中聲明的所有局部變量、參數和聲明的其他內部函數。當其中一個這樣的內部函數在包含它們的外部函數之外被調用時,就會形成閉包。

4.變量的作用域

要理解閉包,首先要理解變量的作用域。

變量的作用域無非就是兩種:全局變量和局部變量。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 石渠县| 广平县| 游戏| 礼泉县| 辛集市| 兰溪市| 黔南| 德庆县| 邢台市| 林州市| 自贡市| 普洱| 齐齐哈尔市| 齐河县| 浮山县| 衡东县| 崇州市| 华坪县| 三穗县| 涿州市| 藁城市| 赤峰市| 庐江县| 泗阳县| 砀山县| 巴楚县| 德阳市| 闸北区| 南部县| 梅河口市| 鞍山市| 迁西县| 会同县| 巍山| 阜南县| 仪陇县| 招远市| 鹤壁市| 多伦县| 永宁县| 彭山县|