JS-function meets special usage notes

1、// 函数表达式可以包含名称,这在递归时很有用
var f = function face(x) {
    if(x <= 1){
        return 1;
    }else{
        return x*fact(x-1);
    }
}

2、// 在f()调用结束之后继续调用返回值中的方法m()
f().m();

3、var o = {
    m: function(){
        var self = this;
        console.log(this === o); // true:这个对象就是o
        f();

        function f(){
            console.log(this === o); // false: this的值是全局对象或undefined
            console.log(self === o); // true: self指向外部函数的this值
        }
    }
}

4、函数表达式中的函数名是一个变量名,变量指向函数对象,和var声明的变量一样,函数表达式的函数被‘提前’到了脚本或函数的顶部;函数声明语句所声明的函数会将函数名称和函数体都‘提前’。

5、new 0.m() // this不指向0,而是指向new出来的这个新对象。

6、callee和caller的区别:
    callee: 指代当前正在执行的函数
    caller: 指代当前正在执行的函数的函数
    例:var fact = function(x){
            if(x=1) return 1;
            return x*arguments.callee(x-1);
        }

7、(function(){}()) // 这里function左边的括号是必不可少的,如果不写,js解释器会试图将关键字function解析为函数声明语句,使用括号js解释器才会正确地将其解析为函数定义表达式。

 

Published 35 original articles · won praise 1 · views 6718

Guess you like

Origin blog.csdn.net/qq_36162529/article/details/102841060