javascript 新方向 (1)

我们进行编程当然少不了定义变量,其实每一个变量都是有他活动范围,也就是作用域,说白了就是在这个范围内我们可以访问到这个值。其实所谓作用域就是将我们应用(代码)划分为一个一个小块,每个变量都是相对于一个小块才有效。小块是可以嵌套,是有层级关系的。

在早期的 JavaScript 中变量作用域函数中,在块级别是没有作用域的概念的,这个是让从其他语言转移过来的开发人员和新手不解的地方。我们可以通过闭包的形式来实现在块级别作用域效果。

local1 作用域就是函数 foo 中,所以我们可以打印变量。

如何想要在作用域外访问该局部变量 lcoal1 就会抛出 undefined 异常。

我们通过大括号定义块级别的代码,然后在块中定义一个局部变量 local2 

因为没有块级别作用域,我们是可以获取 local2 在 { } 以外的位置。

但是es6 新的特性为我们提供块级别的变量 let ,通过 let 定义变量就具有块级别的作用域了。

定义一个变量 n = 4,然后我们随后可以修改这个变量通过重新赋值。

但是如果用 const 来定义一个变量,如果想为其重新赋值就会抛出异常提示您无法为不可变的变量进行重新赋值。

再进一步解释我们定义系数变量 factor = 2 然后使用系数进行计算。

但是如果随后我们不小心修改系数,我们计算结果就会受到影响,所以这种情况我们就应该使用 const 来定我们系数以确保他不会被修改。

我们可以通过 const 来定义变量,接受一个对象作为变量值。

然后我们尝试为 sam 重新赋值 sam = sam 同样会受到不可变变量无法修改的错误。

但是 const 是无法确保这个对象属性不会被修改的,也就是无法确保对象的属性值是不可变的。

虽然我们无法修改 sam 但是我们是可以随意修改 sam 的属性值的。

那么我们应该如何做来确保这个这个对象属性值也是无法修改的呢?我们可以使用 Object.freeze 来冻结这个对象的属性值以避免被随意修改。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,878评论 0 38
  • 基本内置类型 算术类型字符整型布尔值浮点数 空类型(void) 算术类型 带符号类型和无符号类型int、short...
    2625K阅读 3,266评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 和新的语文老师相处已一月有余,刚开始时,觉得他上课讲的内容很多,还很有趣,还挺喜欢他的。但是通过这开学两周,我发现...
    有訶卟薖阅读 218评论 2 0
  • 如果不考虑工程化的问题,React的运行基础环境非常简单,只需要在HTML文件中引入两个js文件(react.mi...
    YINdevelop阅读 450评论 0 0