js作用域與原型的筆試題
阿新 • • 發佈:2019-01-02
百度筆試有題如下:
1 . Array.isArray(Array.prototype)輸出什麼? true
在控制檯上輸出可以看到:
Array.prototype -> []
Array.__proto__ ->function(){}
原理:
- Array.prototype是Array建構函式例項的原型,建構函式例項化後仍為陣列,所以輸出true
- Array.__proto__是原型鏈的表示,指向當前Array的原型,所以必然不是陣列,輸出false
注意:
var a=new Array(2);
console.log(a); //[undefined×2 ]
var b=new String(2);
console.log(b);//String {0: "2", length: 1, [[PrimitiveValue]]: "2"} 物件
2 . 如下程式碼輸出什麼? 3
var a=3;
function c(){
alert(a);
}
(function(){
var a=4;
c();
})();
原理:
js中變數的作用域鏈與定義時的環境有關,與執行時無關。執行環境只會改變this、傳遞的引數、全域性變數等
這裡如果要輸出4,可以利用引數的傳遞,如:
var a=3;
function c (a){
alert(a);
}
(function(){
var a=4;
c(a); //4
})();