美文网首页重学JS
重学JS(二)— 语法细节

重学JS(二)— 语法细节

作者: 尹东方 | 来源:发表于2020-02-18 03:22 被阅读0次

    1. 变量提升

    变量可以先使用稍后再声明,声明前使用返回undefined

    console.log(v); // undefined
    var v = 1;
    console.log(v); // 1
    

    尽量将var放在最顶部便于阅读

    2. 暂存死区

    相对于varletconst不存在变量提升,在声明前引用会抛出引用错误ReferenceError,程序开始到变量声明这一段就是暂时性死区。

    3. 函数提升

    对于函数来说,只有函数声明会被提升到顶部,而函数表达式不会被提升。

    /* 函数声明 */
    foo(); // "bar"
    function foo() {
      console.log("bar");
    }
    
    
    /* 函数表达式 */
    baz(); // 类型错误:baz 不是一个函数
    var baz = function() {
      console.log("bar2");
    };
    

    其实可以理解为变量提升,所以声明前baz === undefined

    4. 数组字面量声明

    多余的逗号会视为添加undefined

    var myList = ['home', , 'school', ];
    console.log(myList); // ['home', undefined, 'school', undefined]
    

    5. ES6 对象字面量声明

    • 提供创建时指定原型
    • foo:foo可以缩写为foo
    • 提供父函数调用(或是类似重写)
    • 提供表达式动态属性名
    var obj = {
        // 指定原型
        __proto__: theProtoObj,  
        // 缩写
        handler,  
        // 父函数调用
        toString() {  
         return "d " + super.toString();
        },
        // 表达式动态计算属性名
        [ 'prop_' + (() => 42)() ]: 42  
    };
    

    6. ES6 模板字符串

    var name = "Bob";
    var time = "today";
    var str = `Hello ${name}, how are you ${time}?`;
    

    7. 函数调用自身(3种方法)

    var foo = function bar(){
      // 以下三种效果相同
      foo();
      bar();
      arguments.callee();
    }
    

    8. 剩余参数(将多余不确定数量参数表示为数组)

    function multiply(multiplier, ...theArgs) {
      return theArgs.map(x => multiplier * x);
    }
    
    var arr = multiply(2, 1, 2, 3);
    console.log(arr); // [2, 4, 6]
    

    相关文章

      网友评论

        本文标题:重学JS(二)— 语法细节

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