函数的作用域
1.全局变量=公用卫生间
2.局部变量=次卧卫生间
     局部变量 全局无法使用
     局部声明变量不加var的话就变成全局变量(不推荐使用)
3.闭包=次卧的可以用自己的卫生间,也可以用公用卫生间;
预解析
1、先把变量声明 全部提前,赋值不动
 
2、函数也有预解析,直接提前
 
3、预解析 不会脱离函数作用域,也不会冲出script标签 最多提到自己标签的顶部
代码执行顺序 见一个srcipt解析执行一个,执行完了 在执行下一个

案例1:
     alert(a);
     var a=12;
解答:预解析直接把var a提前,但是赋值不动
          弹出一个没有赋值的变量,是undefined

案例2:
function show(){
        alert(a);
        var a = 12;    //预解析不回冲出 函数作用域
    }
    show();
    alert(a);//报错
解答:第一个show();调用了函数里面弹出undefined;
          第二个alert(a);局部变量,全局无法使用,所以报错not defined

案例3:

show();
function show(){
     alert(1);
}
解答:函数也有预解析,直接提前,所以调用的时候可以弹出1
这也正印证了那句话:函数在哪里定义不重要,重要的是在哪里调用

案例4:
     var a = 7;
    if(a%2 == 1){
        function show(){
            alert('奇数');   
        }
    }else{
        function show(){
            alert('偶数');   
        }   
    }
    show();
解答:判断只是用来迷惑人的,判断走了第一条语句,但是函数是不会执行的
          但是调用的函数show();只看下面的(从上到下的顺序,下面覆盖了上面的重名函数)所以alert('偶数');

案例5:
     show();
    var show = function(){
        alert(1);   
    }
解答:var show 提前值不动,给一个变量加();答案是not a function
      

javascript里面的闭包,作用域,预解析的更多相关文章

  1. 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )

    变量:  存储数据的容器     1.声明        var   2.作用域       全局变量. 局部变量. 闭包(相对的全局变量):   3.类型         a.基本类型(undefi ...

  2. ECMAScript1.3 数组 | 函数 | 作用域 | 预解析

    数组array 数组可以存储很多项,有顺序,很多项形成一个集合,就是数组. 数组字面量是:[] 如何获取数组中的数据:索引/下标,数组中的第一项的索引是从0开始的. ['kay', 'andy', 1 ...

  3. Javascript 的变量提升与预解析

    一.什么是变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分 二.怎么实现 ...

  4. JavaScript函数之作用域 / 作用链域 / 预解析

    关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ -------- ...

  5. javascript预解析和作用域

    JavaScript解析过程分为两个阶段: 一是:编译阶段.就是JavaScrip预解析阶段,在这个阶段JavaScript解析器将完成把JavaScript脚本代码转换到字节码; 二是:执行阶段.在 ...

  6. Javascript预解析、作用域、作用域链

    最近在看js的一些资料,总结一下昨晚看到的js作用域方面的知识,不准确的地方希望留言指正! 先看片段js代码如下: < script type="text/javascript&quo ...

  7. JavaScript 之有趣的函数(函数声明、调用、预解析、作用域)

    前言:“函数是对象,函数名是指针.”,函数名仅仅是指向函数的指针,与其他包含函数指针的变量没有什么区别,话句话说,一个函数可能有多个名字. -1.函数声明,function+函数名称.调用方法:函数名 ...

  8. js---07 js预解析,作用域---闭包

    js解析器首先不会逐行读代码,这是第二部了. 首先 根据var找到变量,根据function找函数,找到变量var a = 1,js解析器只会读取等号前面的var a,并把a设置值未定义,并不会读取等 ...

  9. JavaScript (四) js的基本语法 - - 函数练习、arguments、函数定义、作用域、预解析

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.函数练习 1.求最值 // - 求2个数中的最大值 function getMax(num1, nu ...

随机推荐

  1. 无锁编程(六) - seqlock(顺序锁)

    seqlock(顺序锁) 用于能够区分读与写的场合,并且是读操作很多.写操作很少,写操作的优先权大于读操作. seqlock的实现思路是,用一个递增的整型数表示sequence.写操作进入临界区时,s ...

  2. (转)ios获取设备系统信息

    UIDevice *device_=[[UIDevice alloc] init]; NSLog(@"设备所有者的名称--%@",device_.name); NSLog(@&qu ...

  3. BZOJ 3631 松鼠的新家

    链剖. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  4. html常用笔记

    <?php //CSS可以对文本格式进行精确的控制 //HTML标记更有利于搜索引擎 //一.标签 <br> <p>//换行后插入一个空行,单字节不换行,双字节自动换行 ...

  5. [转] gc tips(1)

    所有应用软件都需要管理内存,一个应用软件的内存管理系统包括了如下准则:什么时候派发内存,要派发多少内存,什么时候把东西放到回收站,以及什么时候清空回收站.MMgc是Flash Player几乎所有内存 ...

  6. java jodd框架介绍及使用示例

    Jodd是一个普通开源Java包.你可以把Jodd想象成Java的"瑞士军刀",不仅小,锋利而且包含许多便利的功能.Jodd 提供的功能有:  提供操作Java bean,  可以 ...

  7. NodeJS模块

    node> module { id: 'repl', exports: { writer: { [Function: inspect] colors: [Object], styles: [Ob ...

  8. linux -- 串口调试总结

    linux 串口输出调试 在某些情况下,需要同时对两台或多台Linux主机进行管理和操作.如果手头缺少足够多的键盘和显示器,那么通过一台机器的串口对其余主机进行控制不失为一种快捷.有效的方法. 下面就 ...

  9. [禅悟人生]"执著"是自缚的茧

    宋代苏东坡和佛印禅师是好朋友,他们习惯拿对方开玩笑.有一天,苏东坡到金山寺和佛印禅师打坐参禅,苏东坡觉得身心通畅,于是问禅师道:“禅师!你看我坐的样子怎么样?” “好庄严,像一尊佛!” 苏东坡听了非常 ...

  10. 网络加速手段之一,JS文件资源合并下载

    有过ftp下载文件经验的人都有体验,单独下载一个100M的文件比分开下载100个1M的文件速度快很多,这是因为下载需要解析域名,建立连接等额外开销的时间,因此下载100个文件就要做100次这种额外的开 ...