函数的作用域
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. json和jsonp的使用格式

    最近一直在看关于json和jsonp的区别和各自的用法.优缺点!  下面是我看到过解释最清楚的一片文章 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求 ...

  2. POI刷新数据后的函数(公式)更新问题

    使用POI将Excel模板中的数据进行更新,这应该是很常见的操作 下面就贴上我的一小段代码 public class ModifyExcel { /** * @param fileName Excel ...

  3. Qt之QHeaderView排序

    简述 在Windows中我们经常会遇到表头排序,比如可以对文件按照名称.修改日期.类型.大小进行排序,方便我们统一的归类查找. Qt中,我们可以通过点击表头来对QTableView或QTreeView ...

  4. Qt之Tab键切换焦点顺序

    简介 Qt的窗口部件按用户的习惯来处理键盘焦点.也就是说,其出发点是用户的焦点能定向到任何一个窗口,或者窗口中任何一个部件. 焦点获取方式比较多,例如:鼠标点击.Tab键切换.快捷键.鼠标滚轮等. 习 ...

  5. C++实现日期类(Date类)

    #include<iostream>using namespace std;class Date{public:    Date(int year = 1900, int month = ...

  6. 'String' does not conform to protocol 'CollectionType' Error in Swift 2.0

    如下是报错需要修改的源码: // if count(currentPassword) < 6 || count(newPassword) < 6 || count(confirmPassw ...

  7. (六)6.4 Neurons Networks Autoencoders and Sparsity

    BP算法是适合监督学习的,因为要计算损失函数,计算时y值又是必不可少的,现在假设有一系列的无标签train data:  ,其中 ,autoencoders是一种无监督学习算法,它使用了本身作为标签以 ...

  8. 【英语】Bingo口语笔记(8) - 爆破音的发音技巧

    轻读,有时候甚至是听不到的,就嘴巴碰一下而已.

  9. 【Python】Python重新学习

    <python基础教程(第二版)> http://www.cnblogs.com/fnng/category/454439.html 分片(后面取的是前一位) eg: >>&g ...

  10. win32 API 学习

    SendMessage 函数原型 LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam) 详情:百度百科     msd ...