JS的函数作用域

函数的作用域和闭包

作用域

js的作用域和py相似,if while等控制语句并没有自己作用域;而函数是有自己的作用域的;

if (1==1) {
    var s=12;
};
console.log(s);//12

// ----------------------
function f() {
    var temp=666;
};
f();
console.log(temp);//Uncaught ReferenceError: temp is not defined

嵌套函数的作用域:

例1:

var city = 'beijing';

function func() {
  var city = 'shanghai';
  function inner(){
    var city = 'shenzhen';
    console.log(city);
    };
  inner();
};
func();

例2:

var city = 'beijing';
function Bar(){
  console.log(city);
}
function func(){
  var city = 'shanghai';
  return Bar;
}
var ret = func();
ret();    //beijing

闭包:

var city = 'beijing';

function func(){
    var city = "shanghai";
    function inner(){
        // var city = "langfang";
        console.log(city);
    }
    return inner;
}
var ret = func();
ret();
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标题</title>
</head>
<body>

    <script>
        // 函数作用域(js函数作用域和python相似)
        if (1) {
            x=10;
        };
        console.log(x); // 10,if无作用域

        function f() {
            y=11;
        };
        // console.log(y); // Uncaught ReferenceError: y is not defined

        // 嵌套函数作用域
        var city='beijing';
        function f1() {
            var city='shanghai';
            function f2() {
                var city='shenzhen';
                console.log(city);
            };
            f2();
        };
        f1(); // 'shenzhen'
    </script>

</body>
</html>
while True: print('studying...')
原文地址:https://www.cnblogs.com/xuewei95/p/15015677.html