热门标签 | 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

    推荐阅读
    • JavaScript 基础语法指南
      本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
    • 深入理解Vue.js:从入门到精通
      本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
    • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
    • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
    • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
    • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
    • 2018-2019学年第六周《Java数据结构与算法》学习总结
      本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
    • JavaScript 中创建对象的多种方法
      本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
    • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
    • 深入解析Java枚举及其高级特性
      本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
    • 实用正则表达式有哪些
      小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
    • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
    • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
    • Logback使用小结
      1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
    • 本文深入探讨了面向切面编程(AOP)的概念及其在Spring框架中的应用。通过详细解释AOP的核心术语和实现机制,帮助读者理解如何利用AOP提高代码的可维护性和开发效率。 ... [详细]
    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社区 版权所有