码迷,mamicode.com
首页 > 编程语言 > 详细

javascript的作用域以及闭包现象

时间:2018-07-04 20:07:03      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:决定   变量提升   func   定义函数   type   找不到   head   rip   直接   

1、  词法作用域

词法作用域就是定义在词法阶段的作用域,换句话说,也就是js的作用域时在定义阶段决定的,和调用无关。

1.1 作用域沿着作用链向上查找

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

</body>
<script type="text/javascript">
    //引擎执行console.log();在bar()内找不到a,向上查找,foo()也找不到,继续向上查找,在window全局中查找,找到a;
    function foo(){
        var b = a*2;
        function bar(c){
            console.log(a,b,c) // 2 4 8
        }
        bar(b*2);
    }
    var a =2;
    foo(2)

</script>
</html>

  

1.2 函数作用域,定义函数时,会创建自己的气泡(作用域),外部作用无法直接访问。

1.3 立即执行函数 IIFE(Immediately Invoked Function Expression)

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

</body>
<script type="text/javascript">
    var a = 100;
    (function foo(){
        var a =1;
        console.log(a);
    })()
    console.log(a);  //100
</script>
</html>

1.4块级作用域

javascipt没有块级作用域,块级定义的变量会污染上一级作用域

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

</body>
<script type="text/javascript">
        for(vart i=1; i<10; i++){}
        console.log(i);  //10
</script>
</html>

1.5 let语法

es6引入let语法可以解决js没有块级作用域问题,强行绑定所在作用域

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

</body>
<script type="text/javascript">
        for(let i=1; i<10; i++){}
        console.log(i); //报错
</script>
</html>

1.6 变量提升

 

javascript的作用域以及闭包现象

标签:决定   变量提升   func   定义函数   type   找不到   head   rip   直接   

原文地址:https://www.cnblogs.com/Jason-lin/p/9264993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!