长沙java培训
达内长沙芙蓉路中心

18487146383

热门课程

分享:JavaScript自测题

  • 时间:2016-08-05
  • 发布:长沙Java培训
  • 来源:techug.com

达内长沙java培训的老师又来给大家分享题目了。这次有四道题目,来试试你能做对几道呢。

自测一:

(function f(){

function f(){ return 1; }

return f();

function f(){ return 2; }

})();

答案2

如果是一直看下来的话,这个题目应该是比较简单。简单的来说在执行return之前,函数声明会在任何表达式被解析和求值之前先被解析和求值,即使你的声明在代码的最后一行,它也会在同作用域内第一个表达式之前被解析/求值。

参考如下例子,函数fn是在alert之后声明的,但是在alert执行的时候,fn已经有定义了

alert(fn());

function fn() {

return 'Hello world!';

}

所以题目中函数提升了两次,第二次把第一次覆盖了,所以return后面的f是return语句的下一条语句声明的函数f。注意自执行函数(function f (){})();中的f并没有函数提升效果,它是表达式。

自测二:

function f(){ return f; }

new f() instanceof f;

答案false

怎样去理解?

new f(), 首先这个操作会创建一个新对象并调用构造函数函数这一新的对象作为它的当前上下文对象。简单的说 ,

new f();

依稀记得高级程序设计里面是这么说的:

1创建空对象。

2将类的prototype中的属性和方法复制到实例中。

3将第一步创建的空对象做为类的参数调用类的构造函数

默认如果没有覆盖这个空对象的话,返回this

var a = new Object;

a instanceof Object    为true

我们在看f()返回了return f;那么也就是说这个新的对象是是自身,构造函数本身在new的过程中会返回一个表示该对象的实例。但是函数的返回值覆盖了这个实例,这个new就形同虚设。果f的形式为function f(){return this}或function f(){}就不一样。

var a = new f();

a instanceof f  // false

值得注意的是instanceof检测的是原型。

自测三:

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

typeof typeof x;

这题目比较简单,注意下返回类型即可。x = [,][1];即x = typeof y =‘undefind’。

typeof返回的是string类型就可以了 ,typeof typeof必然就是’string’了。

自测四:

function(foo){

return typeof foo.bar;

})({ foo: { bar: 1 } });

答案 “undefined”

纯文字游戏,大家看仔细看。

先分解一下

var baz = { foo: { bar: 1 } };

(function(foo){

return typeof foo.bar;

})(baz);

去掉函数关联

var baz = { foo: { bar: 1 } };

var foo = baz;

typeof foo.bar;

最后,通过替代我们除去中间变量foo

var baz = { foo: { bar: 1 } };

typeof baz.bar;

所以现在就很清晰了,属性中没有定义baz;它被定义为baz.foo上了,所以结果是:”undefined”。

上一篇:JS的功力如何,检验一下吧
下一篇:除了写代码,你还要有这些软技能(上)

达内长沙Java培训教你阅读GC日志

spring注入配置文件属性到java类

Java中Vector和ArrayList的区别

达内长沙Java培训详解volatile关键字

选择城市和中心
贵州省

广西省

海南省