标签:函数 方法 访问 object for循环 code turn func let
let是块级的 var是函数级 (JS以前只有全局的和函数级的)
‘use strict‘ //{ // var a = 12; // let b = 15; //} //console.log(a,b); //b is not defined 因为b在块级范围内是有作用的 //第一种方法访问 //{ // var a = 12; // let b = 15; // { // console.log(a,b); // 12 15 // } //} //第二种方法访问 let b; { var a = 12; b = 15; } console.log(a,b); // 12 15
泄密:
//for (var i=0; i<5;i++) {} //console.log(i) // 5 var是函数作用域 所以下面可以访问到 for (let i=0; i<5;i++) {} console.log(i) // i is not defined 因为let是块级的 只能在for循环内才能被访问到
提升:
function f() { console.log(a); //undefined var a = 12; } f(); 在f()内部,其实做了一个提升 将var a 提升了==》 function f() { var a; console.log(a); //undefined a = 12; } f();
如果用let的话将不被提升
function f() {
console.log(a); //a is not defined
let a = 12;
}
f();
临时失效区
var a = 12; function f() { console.log(a); let a; //a is not defined 因为函数也是个块级 外部有个a 内部也有个a的时候 外部的失效 } f();
代替立即执行
//var config = (function(){ // var config = []; // config.push(1); // config.push(2); // config.push(3); // return config //})(); //console.log(config) //[ 1, 2, 3 ] let config; { config = []; config.push(1); config.push(2); config.push(3); } console.log(config) //[ 1, 2, 3 ]
const使用
const a = 12; a = 15 console.log(a) // Assignment to constant variable.
const a = { name: ‘xxx‘ }; a.name = ‘yyy‘ console.log(a) // { name: ‘yyy‘ }
const这个常量并不是指对象本身不可以修改,而是指常量所指的内存地址不可以修改。
var let的物理指针可以随意修改,而const不行,但物理指针的那个对象是可以修改的。
如果加了Object.freeze(a);后,对象也将不可修改。
标签:函数 方法 访问 object for循环 code turn func let
原文地址:https://www.cnblogs.com/xifeng59/p/11663073.html