【ES6知识整理】变量块级作用域绑定

ECMAScript  是 JavaScript 的语法规则,定义了JS的核心语言特性。ECMAScript 6 简称 ES6 是 ECMAScript 的第六版本。

变量块级作用域绑定:

  1. 在函数作用域和全局作用域中Var声明的变量,无论在哪里声明,都会被当成在当前作用域顶部声明的变量(声明提升到顶部,初始化操作依旧停留在原处),这就是变量提升机制
  2. Var声明的变量在作用域任何地方都可以访问,但是它初始化的值只在对应的块内可以拿到,其他地方可以访问变量,但值为undefined,即可以访问该变量对其进行赋值等操作不会报错。
  3. 块级声明方式:
    • Let与var相似,但是let声明的变量作用域仅仅在当前块中。
    • Const 是常量声明,要求声明之时必须对变量进行初始化
  4. 同一作用域禁止对变量进行重复声明,会报错。但如果是嵌套作用域,在内部声明与外部同名的变量,不会报错。块内:内部声明为新变量,作用于内部作用域。外部:使用定义在外部的同名变量,值不会被内部变量影响。
  5. Const常量定义过后不可以对它进行再赋值否则会报错,但是特例是对象,const声明不允许修改绑定,但是可以修改值,即对象属性绑定的值可以修改不会报错
  6. 由于块级声明的引入,let和const声明的变量不会被提升至顶部,所以在声明之前的区域去访问变量会报错。我们将作用域内,变量块级声明之前的区域,称为临时死区
  7. 循环当中的块级声明变量只存在于循环块中,一旦循环结束,在其他地方均无法访问该变量。
  8. 全局块中使用var去定义一个变量很容易在无意中修改一个已经存在的全局属性,但是用let 或者 const 会在全局作用下创建一个新的绑定,该绑定不会添加为全局对象的属性,即不会覆盖全局变量,只会遮蔽它,所以更安全。

 

 JS中()是一种运算符,跟在函数名之后,表示调用该函数。

    语句: function myfun () {}  【关键字出现在行首,解析为语句】

    表达式: var myfun = function myfun () {} 【myfun会被调用】

    为了不让function出现在行首,而是让引擎将其理解为一个表达式,可以将它放在圆括号内:

   ( function () { 函数体 }() );    当中 ()作为运算符表示调用

   ( function () { 函数体 } ();    ()内部的值是调用的参数

这两种就是 立即调用函数表达式

Ps:两种写法中最后的分号都是必须的,避免出现连续的两个立即调用函数表达式时,第二个表达式会被误认为是第一个表达式的参数。

你可能感兴趣的:(Js,javascript,es6)