刷题记

作者: 心彻 | 来源:发表于2017-12-21 19:44 被阅读17次

    如下代码输出结果:

    var a = 1;
    function f(){
        var a = 2;
        var e = eval;
        e('console.log(a)');
    }
    f();
    

    结果是1

    这题考察的是eval的用法

    直接调用时,作用域时局部的,间接调用时,作用域时全局的,所以如果代码修改如下:

    var a = 1;
    function f(){
        var a = 2;
        eval('console.log(a)');
    }
    f();
    

    结果是2

    JavaScript模块化编程的参考资料:
    Javascript模块化编程(一):模块的写法
    Javascript模块化编程(二):AMD规范
    Javascript模块化编程(三):require.js的用法

    function A() {
        this.do=function() {return ‘foo’;};
    }
    A.prototype=function() {
        this.do=function() {return ‘bar’};
    };
    var x=new A().do();
    

    x 的值是:foo
    知识点:只有实例对象上不存在的属性和方法才会去原型对象上找。

    var x = new Boolean(false);
    if (x) {
      alert('hi');
    }
    var y = Boolean(0);
    if (y) {
      alert('hello'); 
    }
    

    结果只会alert一个hi
    new Boolean()返回一个对象
    Boolean()返回一个具体的布尔值

    ECMAScript 继承机制实现

    • 只要 协议 、 域名 、 端口 有任何一个 不同, 都被当作是 不同 的域。
    • js如何判断一个对象是不是Array?
    • 加号优先级高于 三目运算。
    • var a=b=3 相当于 var a = 3;b = 3;b是全局的
    var f = function g() {
            return 23;
        };
    typeof g();
    

    结果是Error
    解析:
    在 JS 里,声明函数只有 2 种方法:
    第 1 种: function foo(){...} (函数声明)
    第 2 种: var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)

    除此之外,类似于 var foo = function bar(){...} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。

    但为什么不是 "undefined"?
    这里如果求 typeof g ,会返回 undefined,但求的是 g(),所以会去先去调用函数 g,这里就会直接抛出异常,所以是 Error。

    --------------------------------update on 2 Feb 2018----------------------------------------
    七月份的尾巴_3b13同学的指出,还可以借助Function这个构造函数来声明函数,方式如下:
    var foo=new Function(参数1,参数2,...函数体);
    参考:JavaScript几种函数声明方式的区别

    相关文章

      网友评论

          本文标题:刷题记

          本文链接:https://www.haomeiwen.com/subject/dwjgixtx.html