一:js 中的變數提升
例1
a = 2; var a; console.log(a);
答:2
決議:它會將當前作用域的所有變數的宣告提升到程式的頂部,上述代碼等價為:
var a; a = 2 console.log(a); // 2
例2:
console.log(a);// undefined var a = 2;
決議:變數的宣告提升到程式的頂部;等價于:
var a; console.log(a); a = 2;
問題:為什么會有變數提升?
其實啊,js和其他語言一樣,都要經歷編譯和執行階段,而在編譯的時候,會搜集所有的變數并且在本作用域內提前宣告,而且其他代碼都不會改變順序,
1:作用域:除了函式外,js是沒有塊級作用域
2:作用域鏈:內部可以訪問外部的變數,但是外部不能訪問內部的變數, 注意:如果內部有,優先查找到內部,如果內部沒有就查找外部的,
3:js的變數宣告:js的變數宣告其實大體上可以分為三種:var宣告、let與const宣告和函式宣告,
函式宣告與其他宣告一起出現的時候,是以誰為準呢?答案就是,函式宣告高于一切,畢竟函式是js的第一公民,
所以下面函式的呼叫會輸出誰呢? 答案是 foo
foo(); function foo() { console.log('foo'); }
var foo = 2;
那么下面又會輸出誰呢?
foo(); function foo() { console.log('1'); } function foo() { console.log('2'); }
答案是: 2 因為有多個函式宣告的時候,是由最后面的函式宣告來替代前面的,
那下列程式優惠輸出什么呢?
foo(); var foo = function() { console.log('foo'); }
答案是報了Uncaught TypeError: foo is not a function 的例外
例3:
function c(){ var b=2 function a(){ console.log(b); // undefind var b=3 console.log(b); // 3 } a() console.log(b); // 2 } c()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/547022.html
標籤:JavaScript
上一篇:uniapp,常用工具函式
下一篇:前端設計模式——迭代器模式
