Peço-lhe dar atenção a ela! Micro-channel número público :! notas de estudo pilha completa todos os dias para compartilhar novos conhecimentos!
Hoje disse ES6 gramática, o mais básico é var, e muito, o uso const com a diferença, vamos olhar para o amor eo ódio entre eles.
Primeiro de tudo digamos var, contanto que este é aprendido js todos sabem, ele é usado para declarar uma variável, mas vai encontrar alguns problemas no desenvolvimento, mais difícil de resolver. Vamos olhar o seguinte código:
var str="hello world";
function testVar(){
var str="hello";
}
testVar();
console.log(str);
这段代码的结果是 "hello world",这说明在var 申明的变量,即使是同样的名字,在不同的块中,在外层块中的变量优先级更高,也就是说,在外层优先使用并且只能使用当前块中的变量;而在他的内部块中的变量,比如说这个函数里面的str,他其实也是优先使用块内的str变量,会屏蔽掉外面的str变量,这是一点。再来看看下面一段代码
function variableHoisting(){
if(condition){
var test="hello javaScript";
}else{
console.log(test)
//这里可以访问到test,但是它是undefined,因为初始化为它赋值成了undefined
}
//这里也可以访问到test
}
可能你会感到奇怪,我的var 申明的变量在if 代码块里面,为什么我的else里面也能访问呢,其实上面这段代码相当于下面这段代码
function variableHoisting(){
var test;
if(condition){
test="hello javaScript";
}else{
console.log(test)
//这里可以访问到test,但是它是undefined,因为初始化为它赋值成了undefined
}
//这里也可以访问到test
}
现在知道了吧?这就是所谓的变量提升,我在if里面申明的变量,其实浏览器在预解析的时候就对var ,以及function关键字的变量或者方法进行了处理,处理后的代码就是上面这段代码(当然,我之前讲过一篇函数声明与函数表达式的区别,你可以看看,你会知道更多。)看到这里,也许你不会感觉var 有什么不好的地方,再往下看看:
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs.push(function() {
console.log(i);
});
}
funcs.forEach(function(func) {
func(); // 输出数值 "10" 十次
});
可能你想的是输出0,1,2,3,4,5,6,7,8,9但是这不是正确答案,这只能输出10个10,为什么呢?因为循环完成过后,i已经是10了,再次调用的时候,这个i值在每次迭代过程中共享了。
下面我们就来引入一下let,以及const。let 也是用来申明变量的,但是他申明的变量是块级作用域,什么意思呢,看下面
function testLet(){
if(condition){
let str="hello let"
}else{
//这里访问不到str
}
//这里也访问不到str
}
Leia o acima, você provavelmente sabe o que um escopo de nível de bloco, que é uma grande coisa entre parênteses, colchetes é uma peça. Variáveis declaradas por let não é dito antes de levantar o referido variável, por isso, as variáveis de acesso bloco externos que são declaradas não deixar o. Desta forma, disse antes bloco var defeito de código através do qual pequenas mudanças podem ser saída normal 0 ... 9, você olha para
var funcs = [];
for (let i = 0; i < 10; i++) {
funcs.push(function () {
console.log(i);
});
}
funcs.forEach(function (func) {
func(); // 输出数值 0-9
});
这就是let,与var的一个小区别,当然如果说你申明变量的时候不指名是用的var,还是let,编译的时候会将这个变量解析为var申明的变量。
不管是var,还是let,他们是不能重复申明的,比如像下面这样
var str="var";
let str="let";
Isso está sendo dada, compilado, ele não pode ser redefinido.
然后就是const了,这个其实就是常量的单词的英文缩写(constant),没错,这是用来申明一个常量的。什么事常量呢,顾名思义,就是一旦赋值就不能再改变了。比如说:
const MAX=3.1415926;
MAX=3.14;
Isso não funciona, vai reclamar, constantes não pode ser alterado. Const dar uma olhada no ciclo no ciclo mais básico para dentro -i, ele estava sendo dada, e ele será executado uma vez após o erro, mas o para-in circuito que ele não está sendo dado, é claro, por-in dentro do ciclo não irá
var funcs = [],
object = {
a: true,
b: true,
c: true
};
// 不会导致错误
for (const key in object) {
funcs.push(function () {
console.log(key);
});
}
funcs.forEach(function (func) {
func(); // 依次输出 "a"、 "b"、 "c"
});
Isso não está sendo dada, para ver o que é por quê?
Acima disso, as variáveis declarado const não pode ser alterado, mas nós tentamos declarar um objeto e altere o valor da propriedade do objeto dentro.
const object={
name:"学习笔记",
age:18
}
console.log(object.name)
object.name="hello world"
console.log(object.name)
Este código primeiros imprime "as notas de estudo", o segundo irá imprimir "Olá mundo", por quê? Neste razão, na verdade, não é o código de objeto para alterar a variável de objeto, mas as propriedades desta variável, sei que isso não é difícil entender por que o para-in, para-de loop dentro, const não reclamar, certo? Se ele ajuda você, lembre-se de apontar seguidores Oh, se você encontrar um erro no texto, lembro-me indicá-lo.
Micro-channel número público