摘要:作用域链迷惑性代码不假思索的想到出书的一定是啊,然而结结实实被打脸,输出原因在编译时,全局作用域中会存有的对象作用域中存的无在运行时,我这里需要变量啊,但是在的作用域中并不存在,那么就需要去全局作用域中寻找报告老大找到了,输出全局作用域中的
作用域链
迷惑性代码
var a = 100; function test(){ console.log(a); } function testFun(){ var a = 200; test(); }
不假思索的想到 出书的一定是 200啊 ,然而结结实实被打脸,输出 100
在编译时,
全局作用域中会存有的对象
a
test
testFun
testFun作用域中存的
a
test
无
在运行时,
test() 我这里需要变量a 啊,但是在test的作用域中并不存在,那么就需要去全局作用域中寻找 a,报告老大找到了,输出全局作用域中的a,输出100
迷惑性代码
var a = 100; function testFun2(){ var a = 300; function test(){ console.log(a) } test(); } testFun2();
输出什么? 300!
?!为什么呢
作用域链再走一波
1.全局作用域
a
testFun2
testFun2
a
test
test
无
运行时test时,报告老大,我需要变量a ,test作用域:我没有啊,你去看看testFun2有没有;
testFun2作用域:我有 给你拿去好了;
输出 300
实例
"use strict"; x = 3.14; // 报错(x 未定义)
"use strict" myFunction(); function myFunction(){ y = 3.14; // 报错 (y 未定义) }
// 不允许删除变量或对象 "use strict"; var x = 3.14; delete x ;
// 不允许删除函数 "use strict"; function x(p1,p2){}; delete x ; // 报错
// 不允许变量重名 "use strict"; function x(p1,p1){} // 报错
// 不允许使用八进制 "use strict"; var x = 010; // 报错
// 不允许使用转义字符 "use strict"; var x= 10; // 报错
// 不允许对只读属性赋值 "use strict"; var obj ={}; Object.defineProperty(obj,"x",{value:0,writable:false}); obj.x = 3.14;
// 不允许对一个使用 getter方法读取的属性进行赋值 "use strict"; var obj ={get x(){return 0}}; obj.x=3.14; // 报错
// 变量名 不能使用 "eval"字符串 "use strict"; var eval = 3.14; // 报错
//变量名不能使用 "arguments"字符串 "use strict"; var arguments = 3.14; //报错
// 禁止 this 关键字指向全局对象 function test(){ console.log(this); // undefined }
implements
interface
let
package
private
protected
public
static
yield
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/107366.html
摘要:所以,最终极的办法是一层一层冻结所有对象。块级作用域使呈现出块级作用域的特征。声明的变量仅存在于当前块级作用域中。在中,严格模式下等价于使用声明,非严格下等价于使用。在中使用声明的变量,为了保持程序的严谨性,不允许被访问。 let和const都是声明变量的新方式。 一般的,由于这两种声明方式的特性,现在项目组的开发规范中都会要求:不使用var而是let或const。 Const co...
摘要:该对象包含了函数的所有局部变量命名参数参数集合以及,然后此对象会被推入作用域链的前端。如果整个作用域链上都无法找到,则返回。此时的作用域链包含了两个对象的活动对象和对象。 前端学习:教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-前端资源汇总 欢迎提issues斧正:闭包 JavaScript-闭包 闭包(closure)是一个让人又爱又恨的somet...
一、我们先说说javascript的作用域 ①全局变量-函数体外部进行声明 ②局部变量-函数体内部进行声明 1)函数级作用域 javascript语言中局部变量不同于C#、Java等高级语言,在这些高级语言内部,采用的块级作用域中会声明新的变量,这些变量不会影响到外部作用域。 而javascript则采用的是函数级作用域,也就是说js创建作用域的单位是函数。 例如: 在C#当中我...
摘要:特别注意的是不用声明的变量那么他归所有也就是全局作用域所有。如果到达全局作用域但是这个变量仍未找到,则会抛出异常。语句结束后,作用域链恢复正常。 1.javascript不管是变量(or 叫变量表达式?或者变量的声明与赋值吧 var scope=loacal)的声明还是函数(or 函数表达式)的声明,都遵循命名在当前作用域前置(提升到当前命名空间顶端)函数体保留在原地。 var sco...
摘要:构造函数返回值是或,这种情况下指向的是返回的对象。并执行了构造函数中的方法如果函数没有返回其他对象,那么指向这个新对象,否则指向构造函数中返回的对象。对于文档来说应当是唯一的。的值意味着其不可能是基本数据类型。 关于【Step-By-Step】 不积跬步无以至千里。 Step-By-Step (点击进入项目) 是我于 2019-05-20 开始的一个项目,项目愿景:一步一个脚印,量变引...
阅读 2533·2021-07-26 23:38
阅读 3433·2019-08-30 13:10
阅读 2317·2019-08-29 18:33
阅读 2323·2019-08-29 16:12
阅读 988·2019-08-29 10:59
阅读 1798·2019-08-26 17:40
阅读 766·2019-08-26 11:59
阅读 813·2019-08-26 11:41