js作用域Scope_CPlusPlusLove的博客-程序员秘密

技术标签: javascript  

作用域Scope

在编程语言中,作用域控制着变量和参数的可见性及生命周期.
对于程序员来说这是一项重要的服务,因为它减少了名称冲突,并且提供了自动内存管理.

var foo = function(){
    
  var a = 3, b = 5;
  var bar = function(){
    
    var b = 7, c = 11;
    //此时 a为3,b为7,c为11
    a += b + c;
    //此时 a为21,b为7,c为11
  }
  //此时,a为3,b为5,而c还没有定义
  bar();
  //此时 a为21,b为5
}

大多数类C语言语法的语言都拥有块级作用域.在一个代码块{}中定义的所有变量在代码块的外部是不可见的.
定义在代码块{}中的变量在代码执行结束后会被释放掉.

尽管javascript的代码块语法貌似支持块级作用域,但实际上javascript并不支持.
javascript确实有函数作用域.哪意味着定义在函数中的参数和变量在函数外部是不可见的,
而在函数内部任何位置定义的变量,在该函数内部任何地方都可见.

很多现代语言都推荐尽可能延迟声明变量.而用在javascript上的话却会成为糟糕的建议,因为它缺少块级作用域.
所以,最好的做法是在函数的顶部声明函数中可能用到的所有变量.

但是这种现状很快就会改变,因为ES6规范中已经出现了一个新的关键字let代替var,它可以用来声明变量,并且产生块级作用域

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenjh213/article/details/51114013

智能推荐

vectorvn1610报价_VECTOR硬件通讯盒VN1640_d.Scorpio94的博客-程序员秘密

VECTOR硬件通讯盒VN1640VN1600接口系列提供了对CAN(FD)和LIN网络的灵活而快速的访问。具有2个通道的VN1610 / VN1611注重比较小的尺寸和重量,而具有4个通道的VN1630A / VN1640A专为灵活性和IO支持而设计。VN1630日志提供其他记录功能。具有经过验证的CAN / LIN / J1708-Piggies的总线收发器*通过USB供电,也适用于4通道应用...

linux hdmi 无信号,HDMI补丁!解决X4418开发板Ubuntu与Linux系统HDMI无法使用问题_爱吃饭的小曾的博客-程序员秘密

现发布补丁如下,供各位可以参考,大家可以对比代码的相应文件进行改动:diff --gita/linux/bootloader/u-boot-2014.07/board/s5p4418/x4418/display.cb/linux/bootloader/u-boot-2014.07/board/s5p4418/x4418/display.cindex e17a378..bc3d10d 100755-...

Linux虚拟机安装交叉编译工具arm-linux-gcc-4.3.2.tar.bz2_杰森之的博客-程序员秘密

1 – 本地编译器在当前平台编译,得到的程序在本地执行这时所使用的编译器称为本地编译器如:linux中的gcc编译器、windows上VC等2 – 交叉编译在一种平台上编译出能运行在体系结构不同的另一种平台上的程序如在X86平台上编译出能运行于ARM平台上的程序,所使用的编译器称为交叉编译器如后面我们要使用的arm-linux-gcc等由于嵌入式设备没有足够的内存及存储资源来完成其...

js 的函数赋值_Keiner_Sorge的博客-程序员秘密_js函数参数赋值

JS中的函数是非惰性求值,也就是说f(a=100)是将a=100完成计算赋值后的结果即100传入到了f函数中,传入的是值而不是逻辑,相当于f(100),同时变量a也处于函数外也即全局环境了相当于var a=100;f(a)...

Hyperscan 之 pcapscan示例解读_技术探索者的博客-程序员秘密_hyperscan

源码下载:https://github.com/intel/hyperscan/releases/1. 概述此示例实现一个简单的数据包匹配性能测量程序。pcapscan使用libpcap从pcap文件中读取数据包,并根据一个规则文件中指定的多个正则表达式对报文进行匹配,并输出匹配结果和一些统计信息。pcapscan使用并对比了两种匹配模式:BLOCK和STREAM。BLOCK模式时它对单个数据包进行匹配;而STREAM模式下它通过五元组将数据包进行简单分流,并对每条流中的数据进行匹配。STR

MySQL唯一约束(UNIQUE KEY)_YHJ的博客-程序员秘密_mysql唯一约束

MySQL唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,.

随便推点

蓝牙 GATT 协议_Code&Ocean的博客-程序员秘密_蓝牙协议gatt

现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。

IntelliJ IDEA 创建第一个Mybatis工程_lucia_fanchen的博客-程序员秘密

暑假的时候学习SSH三大框架,记得花了整整一个暑假才把他们学完,后来接触了Mybatis,听说易上手,所以就学习学习.,简单总结一些两者的区别吧:1.两者最大的区别:针对简单逻辑,Hibernate和MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关

Unity打包报错 SDK Tools version 0.0.0 < 26.1.1_iDaDi的博客-程序员秘密_sdk tools version

从官网下载Unity2018.4版本,打包时报错。Unity的SDK环境配置也是对的。但是就是不行。发现使用 Android SDK Manager 下载SDK。Unity不支持。只能去Android Studio 编辑器中的SDKManager下载的SDK。Unity打包才支持。下图时Android Studio的SDK Manager。使用这个Unity 打包就可以了。...

python画ROC曲线如何画的好看_weixin_41783077的博客-程序员秘密

import numpy as npfrom sklearn.metrics import confusion_matrix, accuracy_score,f1_score,roc_auc_score,recall_score,precision_scorefrom sklearn import metricsfrom matplotlib import pyplotstyles=['fivethirtyeight', 'dark_background', 'bmh', 'classi.

ubuntu系统的teamviewer的安装及使用_anshujun7558的博客-程序员秘密

参考链接:  安装:https://blog.csdn.net/weixin_34613450/article/details/80541799  使用:https://jingyan.baidu.com/article/cdddd41cbb629453cb00e1f9.html一 .下面给出具体的安装步骤:  1. 首先到https://www.teamviewer...

使用数据库连接工具报此错误 ORA-12505, TNS:listener does not currently know of SID given in connect descriptor_孟某人的博客-程序员秘密

使用Oracle数据库连接工具报此错误Connection to @localhost failed.[66000][12505] Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect de...

推荐文章

热门文章

相关标签