let语法

作者: 他在发呆 | 来源:发表于2016-11-19 11:50 被阅读0次

ES6语法、

Let用来声明变量,但是所声明的变量,只在let命令所在的代码块内有效。不能用于变量提升


{

   let a=10;

   var b=0;

}

console.log(a);//undefine报错

console.log(b)//0

适合环境

for 循环中

for(let i=0;i<10;i++){}

  1. 变量提升问题

console.log(a);

console.log(b);

var a=2;

let b=0;

一个暂时性死区


var tmp=123;

if(true){

tmp='abc';

console.log(tmp);

console.log(typeof tmp)//有let时,typeof也就不安全了

let tmp;//如果不写这句话,console.log正常输出ABC,有了就会报错

//在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”

}

// 举例一个隐蔽的死区

function bar(x=y,y=2){

   return [x,y];

}

bar();//报错,因为x=y时,也还没有声明

// 总结:暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

短板二:不允许重复声明


function (){

   let a=10;

   let a=1;

 }//报错

function (){

   let a=10;

   var a=1;

}//报错

function (a){

   let a=10;

}//报错

function (a){

   {

       let a=10;

   }

}//不报错

ES6新增块级作用域

  • 在Es5中没有块级作用域,只有全局和局部,带来的不合理的场景
  1. 内层变量覆盖外层变量

var tmp=new Date();

function f(){

 console.log(tmp);

if(false){

var tmp="hello world";

}

}

f();//undefine,因为变量的提升问题

  1. for循环计数

 var s='hello';

 for(var i=0;i<s.length;i++){

console.log(i);

}

console.log(i)//造成了全局泄露问题

  • 而let实际就是为JS新增了块级属性

  • 像前面的问题


function f1(){

let n=5;

if(true){

let n=10;

}

 console.log(n);

}

f1()//5

// 内层作用域可以定义外层作用域的同名变量,也可以代替IIFE

在严格模式下


'use strict';

function f(){console.log('I am outside')}

(function(){

if(true){

function f(){console.log('I am inside')}

f();

}

// f();

})()

// 函数声明类似于var,即会提升到全局作用域或函数作用域头部

// 考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。

{

let a = 'secret';

function f() {

return a;

}

}

// 函数表达式

{

let a = 'secret';

let f = function () {

return a;

};

}

新语法不太熟悉,望理解

相关文章

  • Swift 基本语法01-Swift简介

    Swift 基本语法02-"let"和"var"Swift 基本语法03-"if let"和"guard let"...

  • Swift if let & guard let 语法糖

    if let 和 guard let 语法糖 总结:

  • Swift 基本语法02-"let"和&qu

    Swift 基本语法01-Swift简介Swift 基本语法03-"if let"和"guard let"Swif...

  • let语法

    ES6语法、 Let用来声明变量,但是所声明的变量,只在let命令所在的代码块内有效。不能用于变量提升 适合环境 ...

  • 块级绑定

    块级绑定 let 声明 var 声明变量存在变量提升。 let 声明的语法与var的语法一致。 let声明会将变量...

  • swift 语法糖

    if let 与 guard 语法糖 话说if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码...

  • ES6

    1.let 使用let声明变量的语法和使用var声明的语法是一样的。但是let声明的变量的作用域会限制在当前的代码...

  • JavaScript-对象

    创建一个对象 let user = new Object(); // “构造函数” 的语法let user = {...

  • let和const

    let/const(常用) let和var 区别 let,const用于声明变量,用来替代老语法的var关键字,与...

  • let语法特性

    形成块级作用域 这里循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。输出3次abc,表明函数内部变量...

网友评论

      本文标题:let语法

      本文链接:https://www.haomeiwen.com/subject/qyzspttx.html