前端题

执行代码求输出,并说明为什么,严格模式下输出有变化吗,为什么

1、

var a = function () {this.b = 3;}
var c = new a();
a.prototype.b = 9;
var b = 7;
a();

console.log(b);
console.log(c.b);

  

 

2、

console.log(foo()); 
var foo = function() {
    return 1;
}
console.log(foo()); 
function foo() {
    return 2;
}
console.log(foo());

  解析:很基础的变量提升、函数提升,详细可以移步 JavaScript中的变量提升和函数提升

3、

for(var i = 0; i < 6; i++) {
    setTimeout(function() {
        console.log(i);         //位置1
    }, 1000 * i);
}

console.log(i); 

  问:1、 实现的效果;
  2、 将 var i = 0; 改成 let i = 0; 效果如何;
  3、除了上面的方法,还有什么方法可以达到上面的效果,并能规避上面的错误;
  4、将 setTimeout 的时间 1000 * i 改成 0,效果如何;

  

答:1、 先打印一个6,再每隔一秒打印一个6;

  2、 这里光注意 let 在 循环内的表现,疏忽了位置2的报错,正确答案是:首先报出一个 ReferenceError: i is not defined,然后每隔一秒输出 0,1,2,3,4,5;

  3、手写代码:

for(var i = 0; i < 6; i++) {
    (function(i) {
        setTimeout(function() {
            console.log(i);
        }, 1000 * i);
    })(i)
}

console.log(i);

4、先打印位置2的1个6,然后打印出6个6

 

 

4、

function foo() {
    console.log(typeof kkk);
    console.log(typeof bar);

    var kkk;
    function bar() {};
}

console.log(typeof foo());

问:1、效果如何;
  2、函数没有返回值,返回什么;
  3、typeof 在判断类型时有什么弊端;
  4、function 同样算是一种 object,为什么不像 Array 一样返回 object 而是返回 function?

答:1、undefined、function、undefined;
  2、undefined;
  3、在判断 Array、Date等对象都返回 object,不能确切判定出,typeof null = object;

 

 

5、

var bar = {
    foo: function() {return this.baz},
    baz: 1
};
(function() {
    console.log(typeof arguments[0]());
})(bar.foo)

  

 

posted @ 2020-04-10 10:24  靖哥哥~  阅读(178)  评论(0)    收藏  举报