ES6構文:差varが、聞かせて、constが詳しいです

私はあなたがそれに注意を与える請います!マイクロチャンネル公衆数:!フルスタックの研究ノート、毎日新しい知識を共有するためには!
今日はES6文法言った、最も基本的には、VAR、聞かせて、違いがconstの使用方法、それらの間の愛と憎しみで見てみましょうです。
まず言うのVARの、限りこれはjsファイルにすべてのノウハウを学習されて、変数を宣言するために使用されているが、それは解決するには、より困難な、開発中のいくつかの問題が発生します。次のコードで見てみましょう:

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
}

上記を読んで、あなたはおそらく、括弧内の大きなものが何であるかをブロックレベルのスコープを、知っている、ブラケット作品です。変数はそうさせないと宣言された外部ブロックアクセス変数で、変数とを持ち上げる前に言われていないのletによって宣言されました。このように、小さな変化が通常の出力0 ... 9ことができるようなコードのVAR不良ブロックの前に、あなたが見ました

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

これは、コンパイルされ、与えられている、それは再定義することはできません。

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

これは文句を言うだろう、動作しない、定数を変更することはできません。-i内部のための最も基本的なサイクルのサイクルを見てみましょうCONST、彼が与えられていた、そしてそれは、エラーの後に一度実行されますが、彼は、もちろん、について説明されていないされているインforループインループ内ではないでしょう

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

これが理由であるかを確認するために、与えられていないのですか?

その上で、変数はCONSTを変更することはできませんが、我々はオブジェクトを宣言しようとした後、オブジェクトの内部のプロパティの値を変更しないと宣言しました。

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

このコードはアウト最初の版画「研究ノートは、」第二は、「ハローワールド」をプリントアウトしますが、なぜですか?このような理由で、実際には、オブジェクト変数を変更するには、オブジェクト・コードはありませんが、この変数の性質は、これがために-で、-のためのループの内側、CONSTは文句を言わない理由、右、理解することは難しいことではありません知っていますか?それはあなたを助けている場合、ポイントのフォロワーに覚えてああ、あなたはテキストに誤りを見つけた場合、私はそれを指摘して覚えています。
マイクロチャンネル公衆数
フルスタックの研究ノート

リリース5元の記事 ウォンの賞賛2 ビュー447

おすすめ

転載: blog.csdn.net/enxiaobai123/article/details/104786071