js基礎題

1.

var y = 1;
if (function f(){}) {    
   y += typeof f;
}
console.log(y); // 1undefined

2.

function foo(){ 
  return foo; 
}
console.log(new foo() instanceof foo); // false

解析:當函數被當作構造函數調用時,遵從以下3個步驟:

i)、創建一個新的空對象。ii)、新創建的對象作爲this參數傳遞給構造函數,從而成爲構造函數的上下文。iii)、如果沒有顯式的返回值,新創建的對象則作爲構造器的返回值進行返回。

3.// 函數提升(函數在函數內部提升),還有,函數聲明相當於一個local變量,重新聲明瞭一個local變量,名字都叫foo
var foo = 1;
function bar() {
  foo = 10;
  return;
  function foo() {}
}
bar();
alert(foo);


4. 

// 變量提升(變量在函數內提升),只提升變量聲明,不提升變量初始化和使用。且,函數提升優先級高於變量提升。

function bar() {
  console.log('bar')
  var foo = 11;
  function foo() {}
  return foo;
  foo = 10;
}
alert(typeof bar());


var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();


5.var x   = 4,
    obj = {
        x: 3,
        bar: function() {
            var x = 2;
            setTimeout(function() {
                var x = 1;
                alert(this.x);
            }, 1000);
        }
    };
obj.bar();


6.// 當函數被當做構造函數運行時,返回時有3種情況。1:沒有設定返回值,默認返回this
// 2.指定返回值爲基本數據類型,則仍然返回this 3.指定返回值爲對象,則按照指定值返回
x = 1;
function bar() {
  this.x = 2;
  return {name: 24};
}
var foo = new bar();
console.log(foo)
console.log(foo.x)


7.// 後面的bar忽略
var foo = function bar() {}; 
console.log(typeof foo);


8.var arr = [];
arr[0]  = 'a';
arr[1]  = 'b';
arr.foo = 'c';
console.log(arr.length);


9.function foo(a) {
  arguments[0] = 2;
  console.log(a);
}
foo(1);


10.function foo(){}
delete foo.length;
console.log(typeof foo.length);
發佈了66 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章