1、變量提高javascript
變量提高:在當前做用於中,js代碼自上而下執行以前,瀏覽器會把全部帶var/function關鍵字進行提早聲明或定義。帶var的關鍵字只是提早聲明一下,帶function的關鍵字在變量提高階段把定義和聲明都完成了。java
console.log(global);
// undefined
var
global =
'global'
;
console.log(global);
// global
function
fn () {
console.log(a);
// undefined
var
=
'aaa'
;
console.log(a);
// aaa
}
fn();
之因此會是以上的打印結果,是因爲js的變量提高,實際上上面的代碼是按照如下來執行的:瀏覽器
var
global;
// 變量提高,全局做用域範圍內,此時只是聲明,並無賦值
console.log(global);
// undefined
global =
'global'
;
// 此時才賦值
console.log(global);
// 打印出global
function
fn () {
var
a;
// 變量提高,函數做用域範圍內
console.log(a);
a =
'abc'
;
console.log(a);
}
fn();
var nums = 99; yu() function yu(){ console.log(nums) //undefined 變量提高 yu函數裏的聲明至關於var nums; console.log(nums);nums=78 var nums = 78; }
2、函數提高函數
js中建立函數有兩種方式:函數聲明式和函數字面量式。只有函數聲明才存在函數提高!如:spa
console.log(f1);
// function f1() {}
console.log(f2);
// undefined
function
f1() {}
var
f2 =
function
() {}
只因此會有以上的打印結果,是因爲js中的函數提高致使代碼其實是按照如下來執行的:code
function
f1() {}
// 函數提高,整個代碼塊提高到文件的最開始<br> console.log(f1);
console.log(f2);
var
f2 =
function
() {}
結語:在函數與變量之間,函數首先會被提高,而後纔是變量。blog
第一次寫博客,寫的不怎麼好,繼續努力。ip