1. 程式人生 > >js作用域與原型的筆試題

js作用域與原型的筆試題

百度筆試有題如下:

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 })();