js变量作用域和闭包的示例

<script>
        /*
      js是函数级作用域,在函数内部的变量,内部都能访问, 外部不能访问内部的,但是内部可以访问外部的变量

      闭包就是拿到本不该属于他的东西,闭包会造成内存泄漏,你不知道什么时候会用这个闭包,然后这个资源会一直占据内存,造成内存泄漏
     */

        /*1 --函数内部可以访问外部的变量*/
        /*var i = 10;

        function test() {
            console.log(i);
        }
        test();*/

        /*2  在函数外部,我们就不能访问函数内部的变量,不然会报变量没有被定义*/
        /*function test() {
            var j = 20;
        }
        console.log(j);*/    //test.html:19 Uncaught ReferenceError: j is not defined

        /*3  函数的嵌套--这个a函数就能访问test函数的j变量*/
        /*function test() {
            var j = 5;

            function a() {
                console.log(j);
            }
            a();
        }
        test();*/    //5

        /*4*/
     /* function test() {

            if(false) {
                var i = 5;
            } else {
                j = 10;
            }
            //i--undefined 是没有被赋值而已    j--10
            //test.html:42 Uncaught ReferenceError: k is not defined 这就是没有定义--报错

            console.log(i+"-->"+j +"-->"+k);
        }
        test();*/

        /*5  -- 这里 在执行的过程中,会将test()这个函数前置,但是在调用它的时候却不会找到j,因为j是在后面定义的*/
        /*test();    //undefined
        var j = 10
        function test() {
            console.log(j);
        }*/

        /*6*/
        /*test();    //返回 undefined
        var k = 200;
        function test() {
            console.log(k);
        }*/

        /*7*/
        /*
        var k;
        test();        //undefined
        k = 200;
        function test() {
            console.log(k);
        }
        */

        /*其实例子6和7是一个意思,都是变量定义了,但是没被赋值,执行test()的时候,都返回undefined*/

        /*9面试题:函数前面加一个波浪线*/
        /*var j = 100;
        ~(function() {
            console.log(j);
        })();    //返回100
        */

        /*10 函数前面没有波浪线的情况*/
        /*var k = 5;
        (function() {
            console.log(j);
        })();*/
        //返回  --》test.html:89 Uncaught ReferenceError: j is not defined

        //函数前面加波浪线,此时会将函数转化为一个表达式 输出  所以这个波浪线很重要

        /*11面试题:*/
        /*var i = 10;
        function test() {
            console.log(i);
            var i;
        }
        test();    */
        // 返回undefined   这里的后面的var i;这条语句会被前置,然后会将外面的全局变量i给覆盖掉,此时这里面的i又没有被赋值,所以,执行test()会返回undefined;  下面12的例子说明这个问题

        /*12*/
        /*var j = 20;
        function test() {
            var j;
            console.log(j);
            j = 5;

        }
        test();    *///返回undefined  和11是一样的,这里在函数内部定义了j 直接把外部的j给覆盖掉了,然后赋值操作又在console语句的后面,所以会出现undefined

        /*---------------------------分割线----------------------*/
        /*13 --这里就是闭包 将我们函数里面的内容用函数的方式返回出去*/
        /*function test() {
            var j = 5;
            return function() {
                return j;
            }
        }
        var t = test()();
        console.log(t);*/
    </script>

深入理解Js的执行过程很重要

这里有,js如何解析函数的

时间: 2024-11-13 19:17:13

js变量作用域和闭包的示例的相关文章

原型模式故事链(5)--JS变量作用域、作用域链、闭包

上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全局变量和局部变量.全局变量:在任何地方都能用,在所有函数之外.局部变量:只能在定义它的函数中,以及它的子函数中使用. 当前作用域没有定义的变量,称为自由变量. 举例子: <!DOCTYPE html> <html> <head> <title>dsfg</

js最基础知识回顾3(字符串拼接,数据类型,变量类型,变量作用域和闭包,运算符,流程控制,)

一.javaScript组成     1.ECMAScript:解释器.翻译 ---------------------------------------------------------几乎没有兼容性问题     2.DOM:Document Object Model --------操作HTML的能力----document--------有一些兼容性问题     3.BOM:Browser Object Model -------------浏览器---------------wind

[刘阳Java]_步步窥探JS变量作用域

今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习.说不定很多人会比我理解这方面基础知识有更好地见解 黄金守则第一条: JS没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域,函数外面的变量函数里面可以找到,函数里面的变量外面找不到 <!doctype html> <html lang="en"> &

js变量作用域

? 1 2 3 4 5 6 7 8 9 10 for(var i =0;i<100;i++)   {        } alert(i);//100 if(true){     var i="91d";   } alert(i);//91d ? 1 2 3 4 5 6 function add(ad1,ad2){   sum=ad1+ad2;   return sum;//如果没有用var声明局部变量,会提升为全局的变量 } alert(add(3,5)); alert(&quo

javaScript的闭包 js变量作用域

js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write("a="+a); var a=90; //定义一个全局变量 function test(){ var a=123; //定义一个局部变量 } test(); document.write("a="+a); a=90; //没有var ,就会试着去找(父函数 的 a),如果找

简述JS的作用域和闭包

作用域:它是指对某一变量和方法具有访问权限的代码空间, 在JS中, 作用域是在函数中维护的.表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境.Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的. 闭包:在js中的我的理解就是函数嵌套函数,当内部函数在定义它的作用域的外部被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们. 作用域的嵌套

整理 JS变量作用域

1  js静态属性和实例属性 原型属性在实例化之后作为类的实例属性.但是实例属性在实例化之后却不能作为原型属性. [javascript] view plaincopy <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>测试</title> </head> <bo

解析js中作用域、闭包——从一道经典的面试题开始

如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎么写,是不是这样? 可是结果呢,弹出来的都是10,为啥? var i,a for(i=0;i<10;i++){ a=document.createElement('a') a.innerHTML=i+'<br>' a.addEventListener('click',function(eve

Python--高阶函数、函数嵌套、名称空间及变量作用域、闭包、装饰器

1.高阶函数(map/reduce/filter) 高阶函数是指函数的参数可以是函数 这篇总结几个常用的高阶函数:map/reduce/filter map函数.reduce函数.filter函数都是Python中的内建函数. map函数 map函数的作用是将一个函数作用于一个序列的每一个元素,一行代码即可完成,不需要用我们平常喜欢用的循环.map将运算进行了抽象,我们能一眼就看出这个函数是对一个序列的每个元素进行了同样的一个操作.map()函数接收两个参数,一个是函数,一个是Iterable,