热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

作用域链&&严厉形式

作用域链迷惑性代码vara100;functiontest(){console.log(a);}functiontestFun(){vara200;test();}不假思索的想到出

作用域链

  1. 迷惑性代码

var a = 100;
function test(){
console.log(a);
}
function testFun(){
var a = 200;
test();
}

不假思索的想到 出版的一定是 200啊 ,但是严严实实被打脸,输出 100

缘由

在编译时,

  1. 全局作用域中会存有的对象

    • a
    • test
    • testFun
  2. testFun作用域中存的

    • a
  3. test

在运行时,

test() 我这里须要变量a 啊,但是在test的作用域中并不存在,那末就须要去全局作用域中寻觅 a,报告老大找到了,输出全局作用域中的a,输出100

  1. 迷惑性代码

var a = 100;
function testFun2(){
var a = 300;
function test(){
console.log(a)
}
test();
}
testFun2();

输出什么? 300!

?!为何呢

作用域链再走一波

1.全局作用域

    • a
    • testFun2
    1. testFun2

      • a
      • test
    2. 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= \010; // 报错

    // 不允许对只读属性赋值
    '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

    推荐阅读
    • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
    • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
    • Java自带的观察者模式及实现方法详解
      本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
    • 模板引擎StringTemplate的使用方法和特点
      本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
    • Java太阳系小游戏分析和源码详解
      本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
    • Java序列化对象传给PHP的方法及原理解析
      本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
    • Java容器中的compareto方法排序原理解析
      本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
    • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
    • 不同优化算法的比较分析及实验验证
      本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
    • [大整数乘法] java代码实现
      本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
    • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
    • Spring学习(4):Spring管理对象之间的关联关系
      本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
    • 数组的排序:数组本身有Arrays类中的sort()方法,这里写几种常见的排序方法。(1)冒泡排序法publicstaticvoidmain(String[]args ... [详细]
    • 面向对象之3:封装的总结及实现方法
      本文总结了面向对象中封装的概念和好处,以及在Java中如何实现封装。封装是将过程和数据用一个外壳隐藏起来,只能通过提供的接口进行访问。适当的封装可以提高程序的理解性和维护性,增强程序的安全性。在Java中,封装可以通过将属性私有化并使用权限修饰符来实现,同时可以通过方法来访问属性并加入限制条件。 ... [详细]
    • 开发笔记:加密&json&StringIO模块&BytesIO模块
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
    author-avatar
    787849993_8c653d
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有