严格模式:

ECMA5后的新指令:"use strict"

它不算一条语句,而是一段文字表达式,更早版本的JavaScript会忽略它。

严格模式无法使用未声明的变量。

严格模式的特点:

  • 在函数内部声明严格模式,拥有局部作用域。只有函数内部的代码按照严格模式执行。
  • 不允许使用未声明的对象
  • 不允许删除对象
  • 不允许删除函数
  • 不允许重复函数参数名
  • 不允许八进制数值文本和转义字符
  • 不允许写入只读属性、只能获取的恶属性
  • 不允许删除不可删除的属性如prototype
  • 不允许使用为未来预留的关键词
  • 在严格模式下,函数中的this是undefined

this关键词:取决于它使用的位置,指代它所属的对象

  • 方法中,指代所有者对象(在JavaScript中函数一般通过函数名来调用,而方法则是通过对象来调用的函数)
  • 单独情况下,指代全局对象(object Window)
  • 函数中,指代全局对象
  • 函数中,严格模式下,this是undefined
  • 事件中,this指代接收事件的HTML元素
  • call()和apply()可以用于将另一个对象作为参数,调用对象方法,使得方法中的this指向参数对象。
  1. <script>
  2. //创建对象
  3. var person = {
  4. name : "lisi",
  5. age : 18,
  6. fullName : function (){
  7. return this.name + " " + this.age;
  8. }
  9. };
  10.  
  11. //显示对象中的数据
  12. //方法中的this指代方法所有者对象,person.fullName()中的this指代person对象
  13. document.getElementById("demo").innerHTML = person.fullName();
  1. <script>
  2. //严格模式下,函数中的this是undefined
  3. "use strict";
  4. document.getElementById("demo").innerHTML = myFunction();
  5. function myFunction() {
  6. return this;
  7. }
  8. </script>
  1. <!-- 在HTML事件中,this指代接收此事件的HTML元素 -->
  2. <button onclick="this.style.display='none'">点我消失</button>
  1. <script>
  2. // call会使this对象指向传进来来的参数对象,因此person1的fullName方法调用的是person2的变量。
  3. var person1 = {
  4. fullName : function(){
  5. return this.name + " " + this.age;
  6. }
  7. }
  8. var person2 = {
  9. name : "lisi",
  10. age : 2
  11. }
  12. alert(person1.fullName.call(person2));
  13. </script>

严格模式的优点:

  • 使我们更容易编写安全的JavaScript
  • 把之前可接受的坏语法转变为真实的错误
  • 在普通JavaScript中,错打变量名会创建新的全局变量,在严格模式中会抛出错误,无法创建。
  • 在普通JavaScript中,如果向不可写属性赋值,开发者不会得到任何错误反馈。
  • 在严格模式中,向不可写的、只读的、不存在的属性赋值,或者向不存在的变量或者对象赋值,将抛出错误、

let关键字:

  • let对象在未声明之前不可以使用,否则会报错:ReferenceError  variable is undefined
  • var声明的变量属于全局对象window,let声明的变量不属于window
  • 在块外声明,let和var都拥有全局作用域,区别是let声明的对象不属于window。
  • 在相同的块或作用域中,var和let声明的对象不允许相互覆盖,即不能重新声明同名对象,否则会报错:already declared.
  • 在不同的块中,可以使用let重新声明对象

循环作用域:

  1. <script>
  2. var i = 7;
  3. for( i = 0;i < 10; i++){}
  4. //此处i = 10
  5. document.getElementById("demo").innerHTML = i;
  6. </script>
  1. <script>
  2. let i = 7;
  3. for( i = 0;i < 10; i++){}
  4. //此处i = 10
  5. document.getElementById("demo").innerHTML = i;
  6. </script>
  1. <script>
  2. let i = 7;
  3. for( let i = 0;i < 10; i++){}
  4. //此处i = 7,如果在循环内用let声明了i,那么i只有在循环内才是可见的
  5. document.getElementById("demo").innerHTML = i;
  6. </script>

const关键字:

与let相似,区别在于const变量需要在声明时就赋值,而且不能重复赋值,否则报错:syntaxError。

可以对const声明的对象属性与数组元素进行更改,但是无法对其重新赋值。

在相同的块或者作用域中,const定义的变量不允许与var和let定义的变量重复声明,否则报错。

22 严格模式&this关键词&let&const的更多相关文章

  1. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  2. 22.访问者模式(Vistor Pattern)

    using System; using System.Collections; namespace ConsoleApplication5 { /// <summary> /// 访问者模 ...

  3. C#设计模式(22)——访问者模式(Vistor Pattern)

    一.引言 在上一篇博文中分享了责任链模式,责任链模式主要应用在系统中的某些功能需要多个对象参与才能完成的场景.在这篇博文中,我将为大家分享我对访问者模式的理解. 二.访问者模式介绍 2.1 访问者模式 ...

  4. [设计模式] 22 模板方法模式 template

    转http://www.jellythink.com/archives/407 在GOF的<设计模式:可复用面向对象软件的基础>一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而 ...

  5. 再起航,我的学习笔记之JavaScript设计模式22(访问者模式)

    访问者模式 概念介绍 访问者模式(Visitor): 针对于对象结构中的元素,定义在不改变该对象的前提下访问结构中元素的新方法 解决低版本IE兼容性 我们来看下面这段代码,这段代码,我们封装了一个绑定 ...

  6. 22状态模式State

    一.什么是状态模式 State模式也叫状态模式,是行为设计模式的 一种.State模式允许通过改变对象的内部状态 而改变对象的行为,这个对象表现得就好像修改 了它的类一样. 二.状态模式的应用场景 状 ...

  7. C#设计模式学习笔记:(22)备忘录模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8176974.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第十个模式--备 ...

  8. 观察者模式(Observer)和发布-订阅者模式(Publish/Subscribe)区别

    观察者模式:定义一对多的关系,让多个观察对象同时监听某一个主题对象,主题对象状态发生变化就通知所有观察者对象.所以它是由两类对像组成:Subject主题+Observer观察者.主题发布事件,观察者通 ...

  9. JavaScript 设计模式: 发布者-订阅者模式

    JavaScript 设计模式: 发布者-订阅者模式 发布者-订阅者模式 https://github.com/Kelichao/javascript.basics/issues/22 https:/ ...

随机推荐

  1. [Reversal 剧情设计] 第一章——不速之客

    夜.草叶上渗出的晶莹水珠反射着清冷的月光,但随后就暗淡下来——一个身披黑色大衣的男人无声地经过,腰间的长剑隐约露出剑柄. 远处是一个静谧的小山村,少有外人来往,此时正值深夜,家家户户都熄灭了油灯,只有 ...

  2. Lingo简单入门,以及对线性规划做敏感性分析设置

    Lingo中用!表示注释,注释结束用;表示,lingo不区分大小写,运行时会自动统一装换成大写 编程步骤: 1.推算出正确的模型 2.确定描述集,定义集合 3.确定变量 4.正确写出每个式子 常用函数 ...

  3. 三值的排序 Sorting a Three-Valued Sequence(洛谷 P1459USACO2.1,IOI96Day2)

    Sorting a Three-Valued Sequence IOI'96 - Day 2 Sorting is one of the most frequently performed compu ...

  4. windows10打开switchHost,提示无修改权限

    1.在C盘找到hsot文件,点击属性,去掉只读,去掉勾选. 点击编辑 点击Users,选择完全控制,这回降低电脑安全! 确定.

  5. Bridge(Ad Hoc)

  6. bistoury建库建表(一)

    bistoury DROP TABLE IF EXISTS bistoury_app; CREATE TABLE bistoury_app( id INT UNSIGNED auto_incremen ...

  7. docker容器 - 宿主机和容器之间复制文件(cp)

    实验环境 CentOS 7.5 容器 容器是镜像的运行实例.不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层:同时,容器中的应用进程处于运行状态. 主机和容器之间复制文件 要想实现在主 ...

  8. 计算几何-Graham法-凸包

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 关键一句话 Cr ...

  9. 【C语言】找出1000以内可以被3整除的数

    分别用while,do-while,for语句实现 方法一:while #include<stdio.h> int main() { int m; m = ; ) { == ) print ...

  10. 忽视自身问题并“积极甩锅”,新氧CEO金星还要脸吗?

    编辑 | 于斌 出品 | 于见(mpyujian) "互联网医美第一股"新氧果然还是爆雷了. 说"果然"是因为于见曾经针对新氧目前的商业模式进行过分析,认为以新 ...