首先先看以下下面的一道面試題:
var num = 10;
fun();
functionfun()
{
console.log(num);
varnum =20;
}
在沒有學(xué)習(xí)之前我會(huì)直接回答為10当辐,現(xiàn)在學(xué)習(xí)JavaScript中的預(yù)編譯概念知道了var關(guān)鍵字的提升概念以及function的聲明概念知道了以上代碼與下面代碼等量:
var num;//全局作用域 遇到var和function 提升
function fun() {
var num ; //局部做用戶 遇到var 提升
console.log(num);
num =20;
}
num = 10;
fun();
再看下面這道題:
//問題:為什么會(huì)出現(xiàn)下面的錯(cuò)誤?
//Uncaught TypeError:fnName is not a function
console.log(fnName(1,2));
varfnName = function(a,b) {
returna + b;
}
以上代碼等同于以下代碼:
var fnName;
console.log(fnName(1,2));
fnName = function(a,b) {
returna + b;
}
可以看到因?yàn)閒unction在等號右面所以只會(huì)對var進(jìn)行提升澜薄,從而會(huì)報(bào)“Uncaught TypeError:fnName is not a function”錯(cuò)誤沙热。
了解變量的作用域可以看以下代碼:
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 20;
console.log(c);
console.log(b);
console.log(a);
}
對于var a=b=c=20; 這類連續(xù)賦值叉钥,在局部作用域內(nèi)只會(huì)對a再聲明,而b篙贸、c的作用域?yàn)槿肿饔糜蛲抖印K灾挥腥肿饔糜騼?nèi)的a報(bào)錯(cuò)為"Uncaught ReferenceError: a is not defined"。
以上這篇JS基礎(chǔ)隨筆(菜鳥必看篇)就是小編分享給大家的全部內(nèi)容了爵川,希望能給大家一個(gè)參考敷鸦,也希望大家多多支持腳本之家。