5-函数调用方式 严格模式 作用域 变量/函数提升

2017-12-01  本文已影响0人  前端雨

函数的调用方式

严格模式

  1. 定义: 在此模式下, 会做更加严格的语法检查
    • 以前在非严格模式下可以使用的一些语句, 在严格模式下直接报错或者抛出异常
  2. 开启严格模式: "use strict";
    • 书写注意
      • 分号可省略
      • 单引号/双引号都可以
      • 区分大小写, 都是小写
      • 必须是10个字符, 需要把字符串写在script标签顶部
  3. 兼容: 如果浏览器支持严格模式就会开启严格模式,如果不支持,'use strict'作为一段字符串忽略处理
  4. 严格模式作用域
    • script的顶部, 对整个script标签内有效
    • 写在函数的顶部, 只对当前这个函数有效

严格模式注意点

  1. 必须使用Var关键字声明变量
  2. 使用delete关键字删除全局变量会直接报错
  3. 对象中不能存在同名的属性
    • 编译器错误
  4. 函数的形参必须唯一(不能出现同名的参数)
    • 编译器错误
  5. 禁止使用with语句
  6. 不能使用eval和arguments作为标识符
  7. 修正函数内部this的指向
    • 在严格模式下, this始终指向指定的值(未指定的话, 就指向undefined)
    • obj.showName.call(null); //指向null
  8. 禁止使用8进制
  9. 在if语句中不能申明函数
  10. 不能使用callee/caller, 一个指向函数自身/返回调用函数的函数
    • 在全局作用域中, caller返回null
  11. 在严格模式下, arguments的使用区别
    • 在非严格模式下, arguments和形参共享同一份数据
    • 在严格模式下, arguments和形参是独立的

作用域: 一个变量的作用范围

  1. 块级作用域: 在JS中没有块级作用域
  2. JS中的作用域
    • script标签组成的全局作用域
    • JS中函数是唯一可以创建作用域的对象
  3. 词法作用域: 一个变量声明完后作用域就已经确定了
    • JS属于词法作用域
  4. 动态作用域: 变量的作用域由程序执行环境决定
  5. 词法作用域中变量的访问原则
    • 首先在当前作用域中查找, 如果没有就去上一级作用域中查找, 直到访问到全局作用域
    • 内层作用域可以访问外层作用域

变量和函数的提升

变量的提升是分作用域的

上一篇下一篇

猜你喜欢

热点阅读