範圍:一段或者乙個函式
全域性:變數定義、函式宣告
函式:變數定義、函式宣告、this、arguments
console.log(a);//undefined
var a = 100;
fn('zhangsan');
function fn(name)
在上面這段中。執行前,先把變數定義拿出來,變數a拿出來並賦值undefined;函式宣告fn拿出來,把函式體賦值給fn。所以執行到第一行的時候a是undefined。
在函式內部。先把變數定義age拿出來,賦值成undefined;this複製成fn物件,arguments複製成【name】。但是函式內第一行緊接著賦值成20了,所以age是20,name是zhangsan
function fuc(){} 函式宣告
var func = function(){} 函式表示式
fn();//不會報錯
function fn()
fn1();//會報錯
var fn1 = function ()
this要在執行時才能確認值,定義時無法確認
var a =
}a.fn();//this === a
a.fn.call();//this ===
var fn1 = a.fn;
fn1();//this === window
作為建構函式執行
作為物件屬性執行
作為普通函式執行
js沒有塊級作用域,只有函式作用域和全域性作用域
所以在塊裡面宣告的變數和在塊外面宣告的一樣,所以盡量不要在塊裡面宣告變數。
函式裡面宣告的變數在函式外面是訪問不到的,是受保護的。
//js沒有塊級作用域
if(true)
console.log(name);
//函式作用域和全域性作用域
var a =100;
function fn()
console.log('global',a);
fn();
var a =100;
function fn()
fn();
var a =100;
function f1()
f2();
}f1();
function f1()
}//得到乙個函式
var f1 =f1();
var a =200;
f1();
使用場景:函式作為返回值
函式作為引數傳遞
//1.函式作為返回值
//2.函式作為引數傳遞
function f1()
}//得到乙個函式
var f1 =f1();
function f2(fn)
f2(f1); //100
var i;
for(i=0;i<10;i++))
})(i)
}
自由變數
作用域鏈,即自由變數的查詢
閉包的兩個場景
stringobject.indexof(searchvalue,fromindex)
//閉包實際使用中主要用於封裝變數,收斂許可權
function isfirstload() else
}}var firstload = isfirstload();
firstload(10);//true
firstload(10);//false
firstload(20);//true
重學前端系列 Javascript物件
我們可以使用getownpropertydescriptor來檢視屬性狀態 var o o.b 2 a 和 b 皆為資料屬性 object.getownpropertydescriptor o,a object.getownpropertydescriptor o,b 複製 如果想改變屬性的特徵或者...
web前端之javaScript 迴圈總結
js原生的迴圈有兩種,一般的for迴圈和for.in迴圈。還有一種常用jquery.each 迴圈。一.js原生迴圈 a.for迴圈,如下 var myarray 1,2,3 for var i 0 i myarray.length i console 1,2,3 b.for.in迴圈,如下 var...
JavaScript系列之陣列去重
陣列去重方法是老生常談,特別是一些bat大廠的面試都會提到這個問題,既然是常談,那麼我也來談談 使用迴圈巢狀,最外層迴圈 array,裡面迴圈 res,如果 array i 的值跟 res j 的值相等,就跳出迴圈,如果都不等於,說明元素是唯一的,這時候 j 的值就會等於 res 的長度,根據這個特...