美文网首页
js学习总结(一)

js学习总结(一)

作者: feeling_1f11 | 来源:发表于2017-11-24 13:46 被阅读7次

    1.函数提升:
    对于函数,只有函数声明会被提升到顶部,而不包括函数表达式。

    /* 函数声明 */
    
    foo(); // "bar"
    
    function foo() {
      console.log("bar");
    }
    
    
    /* 函数表达式   表达式定义的函数,称为匿名函数。匿名函数没有函数提升。*/
    
    baz(); // TypeError: baz is not a function
    //此时的"baz"相当于一个声明的变量,类型为undefined。
    由于baz只是相当于一个变量,因此浏览器认为"baz()"不是一个函数。
    var baz = function() {
      console.log("bar2");
    };
    
    注意:表达式定义的函数,称为匿名函数,匿名函数没有函数提升
    

    2.apply()方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或
    类似数组的对象)提供的参数:

    fun.apply(thisArg, [argsArray])
    

    参数:

    thisArg:

    fun 函数运行时指定的 this 值。需要注意的是,指定的 this 值并不一定是该函数执行时真正的 this 值,如果这个函数处于[非严格模式下]则指定为 nullundefined会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的 this 会指向该原始值的自动包装对象。

    argsArray:

    一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 fun函数。如果该参数的值为null
    或 [undefined]则表示不需要传入任何参数。

    例子:

    //高阶函数
            //这个高阶函数返回一个新的函数,这个函数将他的实参传入f()
            //并返回f的返回值的逻辑非
            function not(f){
                return function(){
                    var result = f.apply(this,arguments);//调用f()
                    console.log(this); //window
                    return !result;//对结果进行求反
                }
            }
    
            var even = function(x){//判断x是否为偶数的函数
                return x % 2 === 0;
            }
    
            var odd = not(even);//一个新函数,所做的事情和even()相反
            [1,,1,3,5,7,9].every(odd);
    
    var result = f.apply(this,arguments);//调用f()
    

    这里的this如果换做null或者undefined,this也是指Window

    相关文章

      网友评论

          本文标题:js学习总结(一)

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