js 中在函数外访问函数内变量的方法总结

一、带返回值的函数。
 

function Hi(){
    var name = "blue";
    return name;
}
var b = Hi();
console.log(b);//blue 也可以写成 console.log(Hi());


我们按照Mozilla官网说明进行案例解释:
 

function makeFunc(){
    var name = "Mozilla";
    function displayName(){
        console.log(name);
    }
    return displayName;
}
var myFunc = makeFunc();
myFunc();


外部函数makeFunc()里面声明了一个本地变量,local variable,然后是一个inner Function。最后返回的是一个函数,这个函数指向inner Function。在外部初始化outter Function,得到的值传给变量myFunc。这里的变量存在着一个函数体,打印后显示一个函数。最后调用,结尾为:
    □:找到makrFunc()
    □:找到return的上一步,inner Function → displayName
    □:inner Function函数体内没有找到name变量,继续往该inner Function的作用域链中查找,也就是上一级。
    □:找到后把结果依次打印出来。
如果返回的是一个本地变量,那么可以改为:
 

function makeFunc(){
    var name = "Mozilla";
    function displayName(){
        console.log(name);
    }
    return name;
}
var myFunc = makeFunc();
console.log(myFunc);//Mozilla


二、使用对象。

很多具有相同属性和方法的对象可以称之为类,js另外的一种使用方式就是模仿其他oo语言的类概念。但是官方并没有对类进行定义(截止到ES5)。
 

var person = new Object();
person.name = "red";
person.age = 29;
person.sayHi = function(arg0,arg1,arg2){
    alert("Hi, " + this.name)
}
console.log(person.name);


但是上面的方法不要再用了,都在用对象字面量形式:
 

var person = {
    name : "blue",
    age : 29,
    title : "yyy",
    sayName : function(){
        alert(this.name)
    }
}
console.log(person.name);