javascript笔试题(2)

来源:互联网 发布:南师大图书馆数据库 编辑:程序博客网 时间:2024/05/16 02:58

手动锚点 : 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]表示可以省略函数名字fa=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。

0 0
原创粉丝点击