课程咨询 :18487146383

  • 分享:JavaScript自测题

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

  • 达内长沙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--零基础全日制班

Java--零基础全日制班

开班日期:7月31日

Java--零基础业余班

Java--零基础业余班

开班日期:7月31日

Java--大数据全日制班

Java--大数据全日制班

开班日期:7月31日

Java--大数据业余制班

Java--大数据业余制班

开班日期:7月31日

  • 网址:http://cs.java.tedu.cn     地址:长沙市开福区芙蓉中路一段 476 号建鸿达现代城 9 楼
  • 课程培训电话:18487146383     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56