您的位置:首页 > Web前端 > JavaScript

javascript笔试题(2)

2016-05-17 19:17 549 查看
手动锚点 : javascript笔试题(1)

第七题

var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();


结果:“undefined”

改写一下:

var foo = {
bar: function(){ return this.baz; },
baz: 1
}
f = foo.bar;
typeof f();


foo.bar执行的时候上下文是 foo,但是当 把 foo.bar 赋值给 f 的时候,f 的上下文环境是 window ,是没有 baz 的,所以是 ”undefined”

测试一下

var foo = {
bar: function(){ return this.baz; },
baz: 1
}

f = foo.bar;

console.log(typeof f());
console.log(typeof foo.bar());




附一只博文:谈谈Javascript的this指针

手贱,给f绑定上作用域试试

var foo = {
bar: function(){ return this.baz; },
baz: 1
}

f = foo.bar;
console.log(typeof f.call(foo));
console.log(typeof foo.bar());




看出call的用途了。。

第八题

var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;


结果:“number”

var x = (1, 2, 3);

x;

x的值是3,这表明,当你有一系列的组合在一起,并由逗号分隔的表达式,它们从左到右进行计算,但只有最后一个表达式的结果保存。

改写一下:

var f = (function g(){ return 2; })();
typeof f;


好的啦。返回的是2,是个数字

第九题

var x = 1;
if (function f(){}) {
x += typeof f;
}
x;


答案:”1undefined“

上文引用的汤姆叔叔的文中提到,function如果是其他赋值语句的一部分,那么function是函数表达式,()包括的functioon也被看作函数表达式。

而函数表达式,长这样:

//[f]表示可以省略函数名字f
a=function [f](){}


f不但可以省略,而且只在函数内部有意义,在函数外部就是undefined。

好吧不信我们测试一下:



所以既然f在外部没有定义,typeof f就返回 “undefined”字符串

1+=“undefined”表达式中1强转成字符串,与后面的字符串相连。结果就是 “1undefined”了。

第十题

(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();


答案:2

函数声明提升。第二个函数声明把第一个声明覆盖了

第十一题

function f(){ return f; }
new f() instanceof f;


答案:false

手贱改成这样子

function f(){ return f; }
console.log(new f() === f);


结果:true

instanceof检测的是是不是属于某个类。

new f()返回了f,与f是相等的。所以instanceof返回false,===返回true

手贱,又改成这样子:

function f(){ return this; }
console.log(new f() instanceof f);


结果:true

function f(){}
console.log(new f() instanceof f);


结果:true

如果函数没有返回值,就返回this。this指向的是调用函数的执行上下文。

new操作都干了什么呢?

var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj);


第一行,我们创建了一个空对象obj

第二行,我们将这个空对象的proto成员指向了Base函数对象prototype成员对象

第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数。

this指针此时指向了f()。instanceof查找原型链上有function f(){},所以返回true。

第十二题

var x = [typeof x, typeof y][1];
typeof typeof x;


结果:”string”

改写一下就是

var x=typeof y;
var res=typeof x//"undefined"
typeof res//typeof "undefined"   --"string"


只要知道typeof返回的是字符串就好啦

题目十三

function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });


结果:“undefined”

改写

var x={foo:{bar:1}};
return typeof x.bar;


x没有bar属性 ,返回undefined。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: