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

猜你喜欢

转载自blog.csdn.net/cotexarm7/article/details/79653254