1、作用域

    一般情况下,一段代码中所用到的名字并不总是有效可用的,
    而限定这个名字(变量)的可用性的代码范围就是这个名字的作用域,可用有效的减少变量名冲突
    2、js的作用域(es6)之前:全局作用域,局部作用域
    3、全局作用域:整个script标签 或者是单独的JS文件
    4、局部作用域(函数作用域),在函数内部就是局部作用域,这个变量名只能在函数内部使用
    5、变量作用域
    根据作用域的不同,变量分为全局变量,局部变量

注意

    如果在函数内部没有声明直接赋值的变量也叫全局变量
    函数的形参也是局部变量
    全局变量:只有浏览器关闭的时候才会销毁,比较占内存
    局部变量:当程序执行完毕就会销毁,比较节约内存
    6、现阶段JS没有块级作用域
    在es6中有块级作用域
    块级作用域 {} if{} for{}
    7、作用域链
    内部函数访问外部函数 采用的就是链试这种结果就是作用域链 (就近原则)

预解析

    先预解析 然后执行代码
    JS引擎会把var和function全部提到当前作用域的最前面然后按照代码的顺序从上往下执行
    预解析分为 变量预解析 和 函数预解析
    变量提升~~~~~~ 变量声明提升到当前作用域的最前面 不提升赋值操作
    函数提升~~~~~~ 函数声明提升到当前作用域的最前面 不调用函数
    函数表达式函数的调用必须写在函数表达式函数的下面
     // 局部变量
function fn() {
var num = 9;
console.log(num);
}
fn() // 作用域链
var num = 7; function fn1() { // 外部函数
var num = 3; function fn2() { // 内部函数 内部函数可以访问外部函数
console.log(num);
var sum = 4;
}
fn2()
}
fn1() console.log(num1); //坑1
var num1 = 80 fun() //坑2
var fun = function () {
console.log(66); } // 经典预解析案例
f1()
console.log(c);
console.log(b);
console.log(a); function f1() {
var a = b = c = 9;
// 相当于var a=9;b=9;c=9 b,c 没有声明直接赋值就是全局变量
console.log(a);
console.log(b);
console.log(c);
}
// 99999 a is not defined
 

javascript作用域、预解析笔记的更多相关文章

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

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

  2. javascript作用域链学习笔记

    作用域链 "JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里." --权威指南 在JavaScript中,一切皆对象,包括函数.函数对象和其它对象 ...

  3. JavaScript作用域(链)学习笔记

    作用域是javascript老生常谈的问题,在面试题中也经常出现.此文记录本人对js作用域的理解.从以下三个方面深入探讨js作用域和js作用域链. 1.什么是作用域? 2.什么是作用域链? 3.常见面 ...

  4. [JavaScript] JavaScript作用域深度解析

    JavaScript作用域 JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里. -- JS权威指南 在JS里,一切皆对象,函数也是. 一.有什么用 什么时候会用到它? ...

  5. 从var func=function 和 function func()区别谈Javascript的预解析机制

    var func=function 和 function func()在意义上没有任何不同,但其解释优先级不同:后者会先于同一语句级的其他语句. 即: { var k = xx(); function ...

  6. JavaScript 作用域链解析

    JavaScript 中有 Scope( 作用域 ) , Scope chain( 作用域链 ) , Execute context( 执行上下文 ) , Active Object ( 活动对象 ) ...

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

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

  8. javaScript中的小细节-script标签中的预解析

    首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...

  9. JavaScript的变量预解析特性

    JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢?事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了解到,J ...

随机推荐

  1. Java并发编程实践

    最近阅读了<Java并发编程实践>这本书,总结了一下几个相关的知识点. 线程安全 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任 ...

  2. 一张PDF了解JDK10 GC调优秘籍-附PDF下载

    目录 简介 Java参数类型 Large Pages JIT调优 总结 简介 今天我们讲讲JDK10中的JVM GC调优参数,JDK10中JVM的参数总共有1957个,其中正式的参数有658个. 其实 ...

  3. someone you loved 歌词翻译

    I'm going under and this time I fear there's no one to save me 我要放弃了,这一次我怕没有人可以拯救我. This all or noth ...

  4. Ethical Hacking - Web Penetration Testing(2)

    INFORMATION GATHERING IP address. Domain name Info. Technologies used. Other websites on the same se ...

  5. JAVA学习过程中遇到的BUG

    Java异常 1.NullPointException java.lang.NullPointException,就是我们经常遇到的空指针异常. java是没有指针的,这里说的"java指针 ...

  6. P1100 高低位切换

    这个题很简单 直接用左移位(<<)和右移位(>>)就可以过了 #include<iostream> #include<cstdio> using nam ...

  7. 详解 CmProcess 跨进程通信的实现

    CmProcess 是 Android 一个跨进程通信框架,整体代码比较简单,总共 20 多个类,能够很好的便于我们去了解跨进程实现的原理. 个人猜测 CmProcess 也是借鉴了 VirtualA ...

  8. JVM系列之:详解java object对象在heap中的结构

    目录 简介 对象和其隐藏的秘密 Object对象头 数组对象头 整个对象的结构 简介 在之前的文章中,我们介绍了使用JOL这一神器来解析java类或者java实例在内存中占用的空间地址. 今天,我们会 ...

  9. java 集合区别

    TreeMap和TreeSet的区别 相同点: TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是排好序的. TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间 ...

  10. Prime Ring Problem--------多重循环用递归来做

    链接:https://vjudge.net/problem/UVA-524 题意:给出正整数n,输出以1开头,由2到n组合的字符序列,使相邻的数相加为素数,最后一个(关键信息为n大于1小于等于16), ...