1.js作用域(全域性變數,區域性變數)內部可以訪問外部,但外部的不能訪問內部的
var a=10;function aaa();
aaa();
//a 為外部變數即全域性變數,所以可以直接訪問到 結果為10
function aaa();aaa();
alert(a);
//a 為函式aaa()內部變數量即區域性變數,所以無法訪問到
var a=10; function aaa();
function bbb()
bbb();
//結果為10,因為aaa()函式不能訪問到bbb()裡面的區域性變數,所以訪問到的是a=10,這個全域性變數。
2.不用var 定義變數時,會預設為是全域性變數(不規範,不推薦)
function aaa()aaa();
alert(a);
//結果為10;
//等價於:
vara;
function aaa();
aaa();
alert(a);
//給未宣告的變數賦值,此變數就會變成全域性變數;var a=b=10; 可以解析成 b=10;var a=b; 也就是b為全域性變數,a為區域性變數,所以外部訪問a訪問不到,訪問b結果為10;
所以為了避免出現這種隱患,我們在定義變數的時候把所有要定義的變數都加上var;
function aaa()aaa();
alert(a);//結果為,無法訪問到
alert(b);//結果為10;
3.變數的查詢是就近原則去尋找,定義的var變數;第二點,變數的宣告被提前到作用域頂部,賦值保留在原地,如下dome;
function aaa()aaa(); //結果為:undefined
/**************/
var a=10;function aaa()
aaa(); //結果為:undefined
可以解析為是:
var a=10;
function aaa()
aaa();
4.當引數跟區域性變數重名的時候,優先順序是等同的
var a=10; function aaa(a)
aaa(a); //結果為:10
5.變數修改的時候另乙個變數會跟著變化,但是當變數重新被定義時,則另乙個不變化
var a=[1,2,3];var b=a;
b.push(4);
alert(a);//結果為[1,2,3,4] 當b改變的時候a也發生了改變
當b重新被賦值的時候 a不會改變.示例:
var a=[1,2,3];var b=a;
b=[1,2,3,4]
alert(a)//結果為[1,2,3]
作用域面試題
1.var a 1 function a console.log a 解析 function a var a a 1 console.log a 2.var b 1 function fn b console.log fn 列印函式 fn b 3.var b 1 function fn b cons...
js面試題總結
1 預編譯 script varx 1 y z 0 function add n y add x 2 function add n z add x 問執行完畢後 x,y,z 的值分別是多少?x 1 y undefined z undefined 函式表示式沒有return 所以為undefined ...
js 面試題總結
1.typeof返回資料型別有哪些 number,string,boolean,object,undefined,function 2.強制型別轉換有哪些?隱式型別轉換有哪些?轉換為string tostring 轉換為number number parseint parsefloat 轉換為boo...