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