js中变量的定义的三中方法:const,var,let
1.const
const 设置的是常量,一经设置不可改变。在设置时必须赋初值。
2.var
var设置的是变量,可以不赋初值。
如果不赋初值的话,变量的类型为undefined;
如果赋值为:
var a="";
则a 的类型为string;
定义时,有无加var的区别:
在JS里的全局环境就是一个对象,这个对象也是JS运行的根,对浏览器中的JS,这个对象就是window对象。对全局JS语句来说,window对象就相当于当前作用域。
1 var mylike="java";//定义了window作用域的一个变量 mylike;
2 yourlike="c#"; //定义了window作用域的一个属性 yourlike;
在全局语句中,加不加var并没有什么区别,但在函数体中加不加var是有区别的
1 var mylike = "c#";
2 yourlike = "c++";
3 console.log("mylike is "+mylike+" "+"yourlike is "+yourlike); //mylike is c# yourlike is c++
4 function change(){
5 console.log("in the function 's mylike "+mylike+"in the function's yourlike "+yourlike); //in the function 's mylike undefinedin the function's yourlike c++
6
7 var mylike = "java";
8 yourlike = "php";
9 console.log("change mylike "+mylike+"change yourlike "+yourlike); //change mylike javachange yourlike php
10 }
11 change();
12 console.log("next mylike "+mylike+""+"next yourlike "+yourlike); //next mylike c#next yourlike php
加了var 的在函数内外表现为两个属性,var 定义的变量是有作用域的。而函数相当于在全局作用域中创建了一个子作用域。js遇到变量或函数时会首先在当前作用域找,没找到再往上一级作用域找。在change函数中如何没有 定义 var mylike 则会输出 “in the function ‘s mylike c#”,而上面在函数中定义 var mylike,当前作用域存在 mylike这个变量,而在一开始mylike还没赋值,为undefined。
在函数中mylike是一个值,函数外mylike是一个值。而没有var修饰的只表现出一个东西。
3.let
let是块级作用域,在函数中定于let变量,在函数外无影响
1 let a=1;
2 console.log(a); //1
3 function change(){
4 let a = 333;
5 console.log(a); //333
6 }
7 change();
8 console.log(a); //1