一日客家话:空心菜(客)风吹:vung coi
ES6 之前没有 block 作用域概念是使用var,会造成区块变数盖全域变数
把 var 改成 let,在执行第二句时就会报错
let apple = 10;
let apple = 11;//报错SyntaxError: Identifier 'apple' has already been declared
let apple = 12;
console.log(apple);
宣告变数可以不加初始值,但变数值是undefined
let a;
一个let 宣告多个变数和值
let a = 10,
b = 20,
c = 30;
console.log(a, b, c);
function mylet() {
{
let x = 2;
console.log(x);//2
}
console.log(x);//Error: x is not defined
}
mylet();
使用let宣告 a变数值是10,下一句再对a变数重新给值5,是不会报错的
let a = 10;
a = 5;
console.log(a);
scope:是区块{ }
不能重新指定值
使用const 宣告a变数是,下一句再对a变数重新给值5但会报错!!
const a = 10;
a = 5;//会报错TypeError: Assignment to constant variable.
console.log(a);
function myConst() {
const x = 10;
{
const x = 2;
console.log(x);//2
}
console.log(x);//10
}
myConst();
stackoverflow:Why can I change a constant object in javascript
non primitive 和 primitive 是哪些?下一篇会说
之前不懂书特别介绍哪些是 non primitive 和 primitive,在找资料时才发现原来和记忆体位置有些关系
思考 : 为什麽物件和array使用const宣告,可以改变值 ???
使用阵列:
const footer = ['apple', 'banana', 'water'];
footer.push('egg');
console.log(footer);
//[ 'apple', 'banana', 'water', 'egg' ]
但重新赋值,会报错
const footer = ['apple', 'banana', 'water'];
footer = ['a', 'b'];
物件:
const family = { dad: 'john', mom: 'amber' };
family['son'] = 'allen';
console.log(family);
//{ dad: 'john', mom: 'amber', son: 'allen' }
但重新赋值,会报错
const family = { dad: 'john', mom: 'amber' };
family = { red: 'apple', yellow: 'banana' };//报错
//Assignment to constant variable.
大部分是建议尽量使用const宣告若值会改变就用let宣告
到底真正改变的意思是什麽?
例如:
数字是固定不变值,使用const宣告,但 array 也不想改变使用 const 宣告可是值可以允许改变
why?
会改变其实是指可以改变记忆体位置
const 不能改变stack 里的memory address
let a = 5;
a = 500;
console.log(a);
记忆体位址值不是正确写法
const a = 5;
a = 500;
console.log(a);
不会报错~
const fruit = [];
fruit.push('apple');
fruit.push('banana');
console.log(fruit);//['apple','banana']
当物件时:stack 的 value 存的是记忆体位置,push 的值是到 heap 里
有符合记忆体位置没有改变,所以就算 const 宣告也不会报错!
const fruit = [];
fruit.push('apple');
fruit.push('banana');
fruit = ['orange'];
['orange']是新的Array会创新的记忆体空间,会指向它
但就会改变stack 里的memory address
就会报错啦
资料来源:
JavaScript’s Memory Model
JavaScript大全
<<: Day-8 Divide-and-Conquer-3 : 二分搜寻法, 费波那契数列, Strassen’s演算法
>>: Day4. 其实一切东西都在那,只是少了渲染 - Render
OS:XP SP3 编译器: DEV C++ 4.9.9.2 工具: OD (ollydbg) 大家...
2022/1/19再练习一次: 改最上面标题的地方: 使用按钮ToggleButton和Switch...
元件介绍 Checkbox 是一个多选框元件。通常使用情境是在一个群组的选项当中进行多项选择时使用。...
现在越来越多人使用Linux系统,所以今天会来介绍一下在Linux上使用终端机安装Python的方法...
大家好! 今天我们要实作的静态函式有点像 Promise 的感觉。 我们进入今天的主题吧! 程序码 ...