JS没有块级作用域

    js没有块级作用域,这个概念容易导致误解,这里就区分下几个情况,大家好好参考下:

我们知道,在其他类C的语言中,由花挂号封闭的代码块都有自己的作用域。但是在JS中,却没有块级作用域:

第四章—变量,作用域和内存问题(二)这里if(true){}代表条件永真,永远执行这条。if(false){}的话就是永远不执行这条。

这个代码执行之后,在if语句定义的变量,在if语句外可以访问的到。在if语句中的变量声明会将变量添加到当前的执行环境中(这里是全局环境)。

还有如下的两个例子:

第四章—变量,作用域和内存问题(二)这里输出:第四章—变量,作用域和内存问题(二)

第四章—变量,作用域和内存问题(二)这里输出:第四章—变量,作用域和内存问题(二)

 

对于for语句而言,也要注意,由其创建的变量i即使在for循环语句结束后,也依旧会存在于循环外部的环境中

第四章—变量,作用域和内存问题(二)

怎么样实现块级作用域,实现js的块级作用域呢?那就是匿名函数。在匿名函数中定义的任何变量都会在执行结束后销毁,这样就很类似其他语言中的for循环中的i在执行循环后销毁i。此处的匿名函数是要自执行的,也就是(function(){......})()这种形式,两个()(),前一个放函数体,后一个代表‘执行’的意思,就像普通的函数调用,当然了也可以放参数如:(函数体)(参数)。用匿名函数模仿块级作用域的代码如下:

第四章—变量,作用域和内存问题(二)

 

相关文章:

  • 2022-12-23
  • 2021-10-05
  • 2021-08-14
  • 2021-09-01
  • 2021-12-25
  • 2021-06-15
  • 2021-07-27
  • 2021-11-19
猜你喜欢
  • 2021-07-28
  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
  • 2021-10-23
  • 2021-06-11
相关资源
相似解决方案