美文网首页
1.块级作用域

1.块级作用域

作者: 莣忧草_3b53 | 来源:发表于2018-07-26 22:47 被阅读0次

let与var区别

1. let为块级作用域,通过{}进行作用域设置
    var为词法作用域,并且只能通过function进行作用域设置
2. let不存在作用域提升,不同的作用域相同的变量,之间不会相互影响
    var存在变量提升,相同的作用域下,后面的变量会替换前部分的变量
3. let存在作用域死区,由于变量只能在声明后使用,变量的不能提升,当子作用域进行let声明,就会进行绑定。父作用域的相同名称的变量,不做用于子作用域。(导致typeof()不再安全)
    var不存在死区,当全局声明后,代码便不会报错,之后重新声明会覆盖(typeof()始终安全)
4. let中相同的作用域下,不能有相同的变量名
    var可以进行相同变量的命名

function在ES6中

function在ES6中与let相似,可以存在于块级作用域,并且不存在提升,因此存在死区,外部代码不能调用内部代码

if(true){
   function f(){

   }
}
else{function f(){
   }
}

JS代码存在问题

var tmp = new Date();
function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}
f();
//提升后的代码
var tmp = new Date();
function f() {
var tmp
  console.log(tmp);
  if (false) {
    tmp = 'hello world';
  }
}
f();

const

const一旦声明马上赋值, 存在块级作用域 ,死区,用于常量的声明,但是并不是指其中内容不允许改变,而是const名称所指向的地址里面的内容不会改变,但是内容所关联的其他内容是否改变,就看自己是否要锁定。(复合类型的数据主要是对象和数组,变量指向的内存地址,保存的只是一个指向实际数据的指针)

const a={}; a.name=’a’; //a里面存放的是地址,并非内容,地址里面所关联的内容改变,不会报错

锁定

Object.freeze({});//不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性

如何将对象完全冻结

var constantize =
 (obj) => {                                        //传入obj
  Object.freeze(obj);                              //将此对象冻结
  Object.keys(obj).forEach( (key, i) => {          //检查是否具有属性
    if ( typeof obj[key] === 'object' ) {          //如果具有属性
      constantize( obj[key] );                     //冻结属性
    }
  });
};

声明变量的方式

声明变量的方式:
const function var let class import

顶层对象

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。
window.a=1;a=2 a//2
但是从let之后 所命名的变量不再是全局对象的属性 它是全局变量

相关文章

  • let、const和var的区别(个人笔记)

    1. 区别 (1)块级作用域块作用域由{ }包括,let和const具有块级作用域,var不存在块级作用域。块级作...

  • 01. 作用域

    1. 作用域 1.1 全局作用域 众所周知,js在引入块级作用域之前是没有块级作用域的。 全局作用域:在其他地方都...

  • 20.作用域

    ES5中作用域的理解 ES5中: 1.没有块级作用域 2.只有两种作用域:全局作用域和函数作用域 1.没有块级作用...

  • js 作用域

    js 作用域主要有:全局作用域和局部作用域,es5之前没有块级作用域,es6有了块级作用域 何为块级作用域,块级作...

  • let和const(笔记)

    块级作用域 一个{}就能形成一个块级作用域,声明对象{}不会形成块级作用域。 let let声明变量.1.只作用在...

  • ES6分享会总结

    学到的内容 ES6的块级作用域 1. 块级作用域的概念 2. ES6允许在块级作用域内声明函数 3. 函数在块级作...

  • ES6(let与const)

    var缺陷 1.重复声明 2.没有块级作用域,只有函数作用域 let特性 1.不能重复声明 2.作用域为块级 co...

  • ES6的块级作用域以及let、const命令

    1.块级作用域 ES5 只有全局作用域和函数作用域,没有块级作用域。 在函数外部声明的变量,都是全局变量,容易导致...

  • let,var和const

    var没有块级作用域,只有方法作用域常见的块级作用域,if(){}。for(){}。

  • 第七章 块级作用域、私有变量

    模仿块级作用域 私有变量  js没有块级作用域,只有全局作用域和局部作用域(函数作用域),块级作用域是指某一部分代...

网友评论

      本文标题:1.块级作用域

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