ES6 Syntaxe: différence var, que, const est détaillée

Je vous prie de prêter attention à lui! Micro-canal numéro public :! notes complètes d'étude de la pile tous les jours pour partager de nouvelles connaissances!
Aujourd'hui , ladite grammaire ES6, le plus fondamental est var, laissez, l' utilisation const avec la différence, regardons l' amour et la haine entre eux.
Tout d'abord , disons var, aussi longtemps que cela est appris js savons tous, il permet de déclarer une variable, mais il rencontre quelques problèmes dans le développement, plus difficile à résoudre. look Let le code suivant:

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
}

Lisez ce qui précède, vous savez probablement ce que la portée de niveau bloc, qui est une grande chose entre parenthèses, crochets est un morceau. Les variables déclarées par let ne se dit pas avant de soulever la dite variable, donc dans les variables d'accès aux blocs externes qui a déclaré ne pas laisser. De cette façon, dit avant bloc défectueux var code par lequel de petits changements peuvent être sortie normale 0 ... 9, vous regardez

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";

Ceci est donné, compilé, il ne peut pas être redéfinie.

然后就是const了,这个其实就是常量的单词的英文缩写(constant),没错,这是用来申明一个常量的。什么事常量呢,顾名思义,就是一旦赋值就不能再改变了。比如说:
const MAX=3.1415926;
MAX=3.14;

Cela ne fonctionne pas, se plaignent, les constantes ne peuvent pas être modifiées. Const jeter un oeil au cycle le plus cycle de base pour l'intérieur -i, il était donné, et il fonctionnera une fois après l'erreur, mais pour en boucle dont il n'est pas donné, bien sûr, pour en à l'intérieur de la boucle ne sera pas

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"
});

Ce n'est pas donné, pour voir ce qui est pourquoi?

Au-delà, les variables déclarées const ne peut pas être changé, mais nous essayons de déclarer un objet, puis modifier la valeur de la propriété de l'intérieur de l'objet.

const object={
    name:"学习笔记",
    age:18
}
console.log(object.name)
​
object.name="hello world"
console.log(object.name)

Ce code premier imprime « les notes d'étude, » la deuxième imprimera « Bonjour tout le monde », pourquoi? Dans cette raison, en fait, est pas le code d'objet pour modifier la variable d'objet, mais les propriétés de cette variable, savent ce n'est pas difficile de comprendre pourquoi le for-in, pour-de l' intérieur de la boucle, const ne se plaint pas, non? Si cela vous aide, pensez à pointer disciples Oh, si vous trouvez une erreur dans le texte, me rappelle le signale.
Micro-canal numéro public
notes d'étude de la pile complète

Publié cinq articles originaux · a gagné les éloges 2 · Vues 447

Je suppose que tu aimes

Origine blog.csdn.net/enxiaobai123/article/details/104786071
conseillé
Classement