由于javascript没有块级作用域的概念,所以在块语句中定义的变量,实际上是在包含函数中而非语句中创建的。

如:

function outputNumbers(count){

for(var i=0; i< count; i++){

alert(i);

}

alert(i);

}

这个函数中定义了一个for循环,而变量 i 的初始值被设置为0。在Java、C++等语言中,变量i只会在for循环的语句块中有定义,循环一旦结束,变量i就会被销毁。可是Javascript中,变量i是定义在outpuNumbers()活动对象中,因此从它有定义开始,就可以在函数内部随从访问它。即使像下面这样错误地重新声明同一个变量,也不会改变它的值。

function outputNumbers(count){

for(var i=0; i< count; i++){

alert(i);

}

var i; //重新声明变量

alert(i); //count

}

Javascript从来不会告诉你是否多次声明了同一个变量;遇到这种情况,它会对后面的声明视而不见,但是会执行后续声明中的变量初始化。匿名函数可以用来模仿块级作用域并避免这个问题。

(function(){

//这里是块级作用域

})()上面代码定义并立即调用了一个匿名函数。将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。而紧随其后的另一对圆括号会立即调用这个函数,

另外一种方法:

var someFunction = function(){

//这是块级作用域

};

someFunction();

上面例子先定义一个函数,然后立即调用它。定义函数的方式是创建一个匿名函数,并把匿名函数赋值给变量someFunction。而调用函数的方式是在函数名称后面添加一对圆括号,但是需要注意的是函数值并不能取代函数名,如

function(){

//这里是块级作用域

}();这样会导致语法错误,因为Javascript将function关键字当作一个函数声明的开始,而函数声明后面不能有圆括号。表达式后面可以跟圆括号

Java是块级作用域吗_javascirpt如何模仿块级作用域(js高程笔记)相关推荐

  1. javascirpt如何模仿块级作用域(js高程笔记)

    由于javascript没有块级作用域的概念,所以在块语句中定义的变量,实际上是在包含函数中而非语句中创建的. 如: function outputNumbers(count){for(var i=0 ...

  2. java区块作用域_ES6-let、const和块级作用域

    1.介绍 总的来说,ES6是在ES2015的基础上改变了一些书写方式,开放了更多API,这样做的目的最终还是为了贴合实际开发的需要.如果说一门编程语言的诞生是天才的构思和实现,那它的发展无疑就是不断填 ...

  3. JavaScript模仿块级作用域

    avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含 函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ...

  4. JavaScript之模仿块级作用域

    简介:在JavaScript中没有块级作用域的概念.这意味这在块语句中定义的变量,实际上在包含函数中而非语句中创建的.证明代码如下: function outputNumbers(count){for ...

  5. js模仿块级作用域(js没有块级作用域私有作用域)

    js模仿块级作用域(js没有块级作用域私有作用域) 一.总结 1.js没有块级作用域:在for循环中定义的i,出了for循环还是有这个i变量 2.js可以模拟块级作用域:用立即执行的匿名函数:(匿名函 ...

  6. 深入理解javascript作用域系列第四篇——块作用域

    前面的话 尽管函数作用域是最常见的作用域单元,也是现行大多数javascript最普遍的设计方法,但其他类型的作用域单元也是存在的,并且通过使用其他类型的作用域单元甚至可以实现维护起来更加优秀.简洁的 ...

  7. block作用域与流程控制(块block、if-else、while、do-while、for-foreach、switch-case、break、continue、label)

    文章目录 1.块作用域---block 2.条件语句---if/else 3.循 环 while do-while 4.确定&通用循环 for foreach 5.多重选择---switch ...

  8. java代码块的定义_Java几种代码块的定义与常见问题

    Java几种代码块的定义与常见问题 代码块,通俗的说就是用一对"{}"括起来的一段代码,代码块可以根据位置分为以下几类: 局部代码块:局部代码块就是指直接在方法或是语句中定义的代码 ...

  9. java多线程学习二、安全与不安全示例:12306买票和银行取钱、java内存模型、内存可见性、线程同步块和方法

    文章目录 前言 1. 什么是块,分为几种 2. 静态块与构造块的区别 一. 举例说明:并发情况下,线程不安全 1. 示例1:unsafe12306取票 2. 示例2:unsafe银行取钱 二.线程不安 ...

最新文章

  1. 南京晓庄学院计算机网络试卷,南京晓庄学院计算机网络8套卷(完整含答案).doc...
  2. 26 进程优先级队列Queue
  3. android6.0 wifi流程,[RK3288][Android6.0] WiFi之从Linkspeed看获取流程
  4. android升级功能键,Android 按键添加转载
  5. 线段树初见——区间询问与改变最大值
  6. CXF整合Spring开发WebService
  7. 【java学习之路】(javaWeb篇)007.正则表达式专题
  8. FPGA与CPLD的区别
  9. 计算机网络专业学python_「非计算机专业」小白如何学好Python?
  10. apache服务通常启动,但打不开网页,提示Try using the Win32DisableAcceptEx directive (转)...
  11. 安装realmedia多路分配器
  12. csdn积分有什么用
  13. Mujoco中旋转轴的定义
  14. python微信聊天机器人_用python实现微信聊天机器人
  15. 成功解决微信跳转到手机默认浏览器下载
  16. 算法导论8.4-4-单位圆中均匀分布情况--桶排序
  17. python实现微信自动投票_Python——开发一个自动化微信投票器【附代码实例方法】...
  18. 滴滴 2019校园招聘笔试编程题-2018.09.18
  19. [UVALive3942] Remember the Word 字符串
  20. .Dragon4444勒索病毒处理成功方法

热门文章

  1. Linux内核之capabilities能力
  2. webRTC之fatal error: ‘absl/strings/string_view.h‘ file not found(二十)
  3. Ubuntu18.04 安装wine
  4. Mac触发角锁屏不睡眠
  5. VTDecompressionSessionDecodeFrame -8969
  6. python之min
  7. linux命令大全-比较常用的
  8. python数据框转化为矩阵_在Python中将系列重塑为Dataframe矩阵
  9. 创建ServerSocket出错Permission denied
  10. python字符串_Python字符串三种格式化输出