美文网首页
块级作用域与函数声明

块级作用域与函数声明

作者: 小龙虾Julian | 来源:发表于2018-08-22 15:45 被阅读0次
1、ES5中规定:函数只能在顶层作用域和函数作用域中声明,不能在块级作用域中声明
// 情况一
if (true) {
  function f() {}
}

// 情况二
try {
  function f() {}
} catch(e) {
  // ...
}

上面两种函数声明,根据 ES5 的规定都是非法的。但是,浏览器没有遵守这个规定,为了兼容以前的旧代码,还是支持在块级作用域之中声明函数,因此上面两种情况实际都能运行,不会报错。

2、ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。
function f() { console.log('I am outside!'); }

(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }

  f();
}());

上面代码在 ES5 中运行,会得到“I am inside!”,因为在if内声明的函数f会被提升到函数头部,实际运行的代码如下。

// ES5 环境
function f() { console.log('I am outside!'); }

(function () {
  function f() { console.log('I am inside!'); }
  if (false) {
  }
  f();
}());

相关文章

  • ES6语法—块级作用域与函数声明

    需要记住的:ES5不允许在块级作用域声明函数ES6引入了块级作用域,明确允许块级作用域中声明函数 如果改变了块级作...

  • ES6语法--let和const

    1:let和const:作用域,全局作用域,函数作用域以及块级作用域(es6)。 let声明的变量只在块级作用域内...

  • ES6的块级作用域以及let、const命令

    1.块级作用域 ES5 只有全局作用域和函数作用域,没有块级作用域。 在函数外部声明的变量,都是全局变量,容易导致...

  • 复习

    复习 函数作用域 全局作用域 局部作用域 块级作用域(es6-let,const) 优先级局部变量(函数体内声明的...

  • html5+es6

    复习 函数作用域 全局作用域 局部作用域 块级作用域(es6-let,const) 优先级局部变量(函数体内声明的...

  • JavaScript函数作用域和声明提前

    函数作用域 JavaScript 中没有块级作用域,JavaScript 取而代之地使用了函数作用域。变量在声明它...

  • ES6分享会总结

    学到的内容 ES6的块级作用域 1. 块级作用域的概念 2. ES6允许在块级作用域内声明函数 3. 函数在块级作...

  • javascript的三种作用域

    javascript 三种作用域 全局作用域 函数作用域 块级作用域(es6) 全局作用域 变量声明不写在函数内部...

  • ES2015(ES6)学习手册

    作用域 全局作用域 函数作用域 块级作用域(es6) let let 声明的变量只在所处的块级有效 let没有变量...

  • es6块级作用域定义声明函数

    允许在块级作用域内声明函数。函数声明类似于var,即会提升到全局作用域或函数作用域的头部。同时,函数声明还会提升到...

网友评论

      本文标题:块级作用域与函数声明

      本文链接:https://www.haomeiwen.com/subject/hgryiftx.html