加油!

typeof返回都是字符串类型,有引号
1.
(function(){
return typeof arguments;
})();
arguments:实参的集合,是一个类数组,他有数组的长度,可以循环,但是他没有数组的方法,如push()等。
输出:“object”
var f=function g(){return 23;};
typeof f();
输出:“number”
var f=function g(){return 23;};
typeof f;
输出:“function”
var f=function g(){return 23;};
typeof g;
输出:“undefined”
var f=function g(){return 23;};
typeof g;
输出:Error
var y=1,x=y=typeof x;
x;
输出:“undefined”
var y=1,x=y=typeof x;
x;
输出:“undefined”
(function f(f){
return typeof f();
})(function(){return 1;});
输出:“number”
var f=(function f(){return "1";},function g(){return 2;})();
type f;
输出:“number”
var x=[typeof x,typeof y][1];
typeof typeof x;
输出:“string”
var x=[typeof x,typeof y][1];
typeof typeof x;
无论x是啥 ,typeof x返回的都是string
输出:“string”
(function(foo){
return typeof foo.bar;
})({foo:{bar:1}});
foo这个形参指的是{foo:{bar:1}}这个集合,这个整体下只有一个属性foo,没有bar属性。
输出:“undefined”
var x=[typeof x,typeof y][1];
typeof typeof x;
输出:“string”
var a=10;
function aaa(){
alert(a);
var a=20;
}
aaa();
变量查找是就近原则去寻找(注:有var的),就近没有找到再去找外层
输出:undefined
var a=10;
function aaa(){
alert(a);
var a=20;
}
aaa();
变量查找是就近原则去寻找(注:有var的),就近没有找到再去找外层
输出:undefined
//a
function Foo() {
getName = function() {
console.log(1);
};
return this;
}
//b
Foo.getName = function() {
console.log(2);
};
//c
Foo.prototype.getName = function() {
console.log(3);
};
//d
var getName = function() {
console.log(4);
};
//e
function getName() {
console.log(5);
}
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
-
Foo.getName();// 2
对象.属性 这里Foo作为函数对象,getName()作为Foo的函数属性,所以看题目b处 -
getName(); // 4
这里看d、e处,d为函数表达式,e为函数声明,两者区别在于变量提升,执行顺序为e=>d,所以e会被d覆盖。 -
Foo().getName(); // 1
这里要看a处,在Foo内部将全局的getName重新赋值为 console.log(1) 的函数,执行Foo()返回 this,这个this指向window,Foo().getName() 即为window.getName(),输出 1。 -
getName(); // 1
上述3中,全局的getName已经被重新赋值,所以这里依然输出 1。 -
new Foo.getName(); // 2
这里等价于 new (Foo.getName()),先执行 Foo.getName(),输出 2,然后new一个实例; -
new Foo().getName(); // 3
这里等价于 (new Foo()).getName(), 先new一个Foo的实例,再执行这个实例的getName方法,但是这个实例本身没有这个方法,所以去原型链__protot__上边找,实例.protot === Foo.prototype,所以输出 3。 -
new new Foo().getName(); // 3
这里等价于new (new Foo().getName()),如上述6,先输出 3,然后new 一个 new Foo().getName() 的实例。
这道题转至:前端·卡卡西
1079



被折叠的 条评论
为什么被折叠?



