前端题
执行代码求输出,并说明为什么,严格模式下输出有变化吗,为什么
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)

浙公网安备 33010602011771号