js:作用域总结1】的更多相关文章

关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量)内部可以访问外部,但外部的不能访问内部的  ; function aaa(){ alert(a); }; aaa(); //a 为外部变量即全局变量,所以可以直接访问到 结果为10 function aaa(){ ; }; aaa(); alert(a); //a 为函数aaa()内部变量量即局部变…
<script type="text/javascript"> alert(i);//Uncaught ReferenceError: i is not defined i=11; </script> <script type="text/javascript"> alert(i);//undefined var i=11; alert(i);//11 </script> 代码1: var name="hel…
js 作用域 js作用域链查找,子函数能取到父函数中定义的变量. 前段时间误写成如下形式: 这只是普通的函数调用,没有父子的关系,child()函数会在全局查找pi变量,没找到所以报错. 最近发现原来是手贱敲错,真想抽自己. 两个变量 notDefine(未定义).notInit(定义了未初始化),用 typeof 运算符的结果一样,但有本质区别 未定义的变量是不存在的,只有用typeof运算符时不报错,对其做任何其他操作都会报错.…
js 作用域 : 1.js 没有块作用域 : for (var i = 0;i < 4; i++){ } alert(i) // i = 3 2.js 没有动态作用域: function f1(){ var x = 10; f(); } function f(){ alert(x) } f1(); // x is not defined 3.词法作用域(静态作用域  或者 叫 闭包)作用域链 function main(){ function sub1(){ function sub2(){ }…
js作用域链 <script> var up = 555; function display(){ var innerVar = 2; function inner(){ var innerVal = 4; console.log(up); } inner(); } display(); //这里涉及到了3个作用域链对象 inner, display, window, 查找变量会依次先上查找 </script> <script> //函数内部,局部变量的优先级比同名的全…
var temp = { LoginAccount: $('#LoginAccount').val(), ShopName: $('#ShopName').val() }; function doSearch1() { $('#datagrid').datagrid('load', temp); } function doSearch2() { $('#datagrid').datagrid('load', { LoginAccount: $('#LoginAccount').val(), Sh…
如下代码,第一次弹出a,因为解析器里找到var a,赋予a变量undefined,弹出undefined <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js作用域</title> <script type="text/javascript"> alert(a); //第一次弹出a为undefined var a…
前言   通过本文,你大概明白作用域,作用域链是什么,毕竟这也算JS中的基本概念. 一.作用域(scope) 什么是作用域,你可以理解为你所声明变量的可用范围,我在某个范围内申明了一个变量,且这个变量能在这个范围内可用, 那么我可以说此范围就是该变量的作用域. 作用域一般分为局部作用域和全局作用域. 怎么理解呢,先说局部作用域.假设我在A范围内用var申明了一个变量a,变量a只能在范围A内使用,超出A范围就调用不到,那么这样的变量a就是局部变量,范围A就是所说的局部作用域. function A…
一.js作用域,先上图: 以上代码执行的效果是,依次弹出 undefined, undefined, a, a,为什么是这样的结果啦?因为JS的作用域为链式作用域. 作用域链: 用VAR声明一个变量时,就为该变量所在的对象添加了一个属性,由于JS的变量都是对象的属性,而该对象可能又是其它对象的属性,而所有的对象都是WINDOWS属性,所以这些对象的关系可以看作一条链,链头就是变量的所处对象,链尾就是WINDOWS对象. 我们来分析一下上面函数中变量的作用域链.第一个alert输出的str,它的作…
1. JS作用域 1.1 全局作用域和局部作用域 函数外面声明的就是 全局作用域 函数内是局部作用域 全局变量可以直接在函数内修改和使用 变量,使用var是声明,没有var是使用变量. 如果在函数内使用var来声明变量,在函数内会覆盖同名的全局变量 1.2 变量提升 在变量声明之前 去使用变量 会得到 undefined ,而不是报错 函数内,如果声明了跟全局变量同名的局部变量, 在声明之前使用改变量,得到undefined( 该变量已经是局部的啦) 1.3 作用域链 当一个作用域 使用某个变量…
一.在ES5中,js 的作用域 js作用域,只有全局作用域与函数作用域,没有块级作用域. 1.全局作用域 var a = 10; function aaa() {alert(a) } function bbb(){ var a=20; aaa() } bbb(); a =10 是全局的  而a=20 是局部的 2.变量的查找是就近原则,去寻找var定义的变量,当就近没有找到的时候就去查找外层. var a=10 function aaa(){ alert(a); var a=20 } aaa()…
回顾 流程控制(语句) 分支 if () {    }​if () {    } else {    }​if () {    } else if () {    } else if () {    } else {    }​​switch () {   case break;   case break;   default: } 循环 while () {    }​do {    } while()​#适合遍历 指定次数循环for (var i = 0; 循环条件; 循环变化) {    …
1.JS作用域:变量和函数作用的范围. 2.JS解析器可以分为域解析和逐行解读代码两个过程. 域解析:1.当进行域解析的时候,一旦找到var,就会提取后面的变量名,并给它赋值给undefined. 2.一旦找到function和形参,把整个函数块赋值给函数名,把形参赋值为undefined 逐行解读代码: 解读表达式,解读函数调用部分. 3.JS解读代码规则: 作用域链中变量只能向上访问,不能向上访问.变量先在自己的作用域中找,找不到再向父级作用域中找. 局部变量不会影响全局变量. 隐式声明的变…
文章目錄 解析机制 JavaScript是一门解释型的语言 , 想要运行js代码需要两个阶段 编译阶段: 编译阶段就是我们常说的JavaScript预解析(预处理)阶段,在这个阶段JavaScript解释器将完成把JavaScript脚本代码转换到字节码 执行阶段: 在编译阶段JavaScript解释器借助执行环境把字节码生成机械码,并从上到下按顺序执行 预解析时做什么 var , function声明的变量提升 首先,创建一个当前执行环境下的活动对象,然后将用 var 声明的变量设置为活动对象…
JS作用域与闭包 在JavaScript中,作用域是可访问变量,对象,函数的集合. 变量分为全局变量和局部变量.全局变量在函数外定义,HTML中全局变量是window对象,所有数据对象都属于window对象.局部变量在函数内定义,只能在函数内部访问,在函数开始执行时创建,在函数执行完之后会自动销毁. JS的作用域分为全局作用域和函数作用域. 全局作用域 全局作用域在页面打开时创建,在页面关闭时销毁.在全局作用域中,创建的变量都会作为window对象的属性保存:创建的函数都会作为window对象的…
一.js没有块级作用域 在c,java等语言中花括号里的代码都有自己的作用域,而js花括号没有块级作用域,经常会导致一些困惑,不明所以.例如: console.info(color); if(true){ var color = "blue"; } console.info(color); 输出结果:undefined    blue 这里开始没有定义color变量,一般来说应该报错,可是没有,是因为if语句里定义了color变量,因为没有块级作用域,第二次输出的是blue. 上面的代…
开始就来说说作用域这个蛋疼的东西.里面可能会出现各种的问题 .先给一个简单的例子大家猜猜结果是什么 var   a="b"; function text(){ alert(a);var a="c";alert(a);} text();    结果就是  a:undefined  a:"c";  为什么第一个a 不是"b"了.这个就要说到函数作用域了.他使用的作用范围我们总结为:函数里面申明的变量是局部的,就只在函数体内部有定义…
js词法环境包括环境变量绑定及外部引用'函数创建的时候有个内部属性[[scope]],它指向当前函数的词法环境对象.而词法环境的外部引用一个词法环境'直到全局词法环境'它外部引用为null'这样就构成作用域链.当进入可执行代码时'会创建执行环境'执行环境包括词法环境变量环境及this关键字绑定'如果是函数'它还会创建一个新的词法环境对象添加到当前作用域链前端'此为活动对象'活动对象的外部引用为此前的最上层执行环境'…
"javaScript没有块级作用域",所谓"块",就是{}中间的内容.所以在声明变量的时候不要在"块"里面,要在一开始声明就好了. 其实js除了全局作用域外,只有函数可以创建的作用域. 作用域是一个抽象的概念,类似于"底盘". 如图,全局代码和函数fn.bar都会形成一个作用域.而且作用域有上下级关系,上下级关系的确定就看函数是在哪个作用域下创建的.例如fn作用域下创建了bar函数,那么"fn作用域"就是…
黄金守则第一条: js没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域,函数外面的变量函数里面可以找到,函数里面的变量外面找不到. first try: 这是为什么呢?? var a = 10; function aaa(){//step-4 alert(a);//step-5->执行alert,此时只能找到外面的a=10故弹框10 } function bbb(){//step-2 var a = 20; aaa();//step-3 } //定义了函数没啥用,调用才是真格的所…
都知道js中不存在类似于c++等语言的块级作用域,例如for循环中定义的变量,其实是属于当前对象下的属性,同一对象下可以随便访问.只有函数可以限定一个变量的作用范围,即函数才是变量的作用域. 对于函数的变量访问时遵循作用域链的,即当前函数运行时会有一个当前作用域,当饮用某个变量时,会先查找当前作用域内是否存在该变量的定义,如果不存在则根据作用域链向上去查找父函数的作用域,有则拿来使用,没有则继续向上直到全局作用域.关于作用域链这里就不仔细描述,简单而言,类似原型链,从全局函数直到当前函数的作用域…
(1)作用域 一个变量的作用域(scope)是程序源代码中定义的这个变量的区域. 1. 在JS中使用的是词法作用域(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用域(function scope),属于局部变量 局部变量优先级高于全局变量 var name="one"; function test(){ var name="two"; console.log…
一直对Js的作用域有点迷糊,今天偶然读到Javascript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作用域 先看一小段代码: var scope="global"; function t(){ console.log(scope); var scope="local" console.log(scope); } t(); (PS: console.log()是firebu…
要理解变量的作用域范围就得先理解作用域链 用var关键字声明一个变量时,就是为该变量所在的对象添加了一个属性. 作用域链:由于js的变量都是对象的属性,而该对象可能又是其它对象的属性,而所有的对象都是window对象的属性,所以这些对象的关系可以看作是一条链 链头就是变量所处的对象,链尾就是window对象 看下面的代码: function t() { var a; function t2() { var b; } } js中函数也是对象,所以变量a所在的对象是t,t又在window对象中,所以…
 一直对Js的作用域有点迷糊,今天偶然读到JavaScript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作用域 先看一小段代码: [javascript] view plain copy   var scope="global"; function t(){ console.log(scope); var scope="local" console.log(scope);…
先看下面一段代码: 代码执行的结果是: 1st alert : a = 0 2nd alert : a = undefined 5th alert : a = 0 3rd alert : a = 3 4th alert : a = 2 疑问1:对于 2nd alert 而言,为什么 a 的值是 undefined ? 首先来看 JS 的执行环境和作用域. 执行环境(executing context)定义了变量或函数有权访问的其他数据.在 JS 中,有两种执行环境,一种是全局环境,也就是 Web…
一直对Js的作用域有点迷糊,今天偶然读到JavaScript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作用域 先看一小段代码: var scope="global"; function t(){ console.log(scope); var scope="local" console.log(scope); } t(); (PS: console.log()是firebu…
// 作用域: // 域:空间.范围.区域…… // 作用:读.写 script 全局变量.全局函数 自上而下 函数 由里到外 {} 浏览器: “JS解析器” 1)“找一些东西” :var function 参数 a = ... 所有的变量,在正式运行代码之前,都提前赋了一个值:未定义 fn1 = function fn1(){ alert(2); } 所有的函数,在正式运行代码之前,都是整个函数块 JS 的预解析 遇到重名的:只留一个 变量和函数重名了,就只留下函数 2)逐行解读代码: 表达式…
我们知道在编程语言中,作用域的作用就是控制变量.参数的可见范围和生命周期. 同时内部函数也可访问外部的函数和变量. js中提供了函数作用域的功效,比如在函数中定义的变量外部是无法访问到的: function jsFunc(){ var a = 5; } alert(a); // undefined 但是js中却没有提供块作用域的功效,比如我们在java代码中如果些如下代码: public static Boolean b = false; public static void main(Stri…
// 作用域:(1)域:空间.范围.区域……     (2) 作用:读.写 script 全局变量.全局函数 自上而下 函数 由里到外 浏览器: “JS解析器” 1)“找一些东西” :var function 参数 a = ... 所有的变量,在正式运行代码之前,都提前赋了一个值:未定义 fn1 = function fn1(){ alert(2); } 所有的函数,在正式运行代码之前,都是整个函数块 JS 的预解析 遇到重名的:只留一个 变量和函数重名了,就只留下函数 2)逐行解读代码: 表达…