<script type="text/javascript">
{
var a=12;
}
console.log(a);
</script>
浏览器输出12,说明var声明变量的作用域是全局的。
<script type="text/javascript">
{
let a=12;
var a=13;
}
console.log(a);
</script>
浏览器输出报错信息,说明let声明的变量是块级作用域,不能重复声明。
<script>
var a=[];
for(var i=0;i<10;i++){
a[i]=function(){
console.log(i);
};
}
a[6]();// 10 因为i是用var声明的,作用于全局。
</script>
<script>
var a=[];
for(let i=0;i<10;i++){
a[i]=function(){
console.log(i);
};
}
a[6]();// 6 因为不能重复声明,且是块级作用域,所以每一次循环,都是一个新的函数
</script>
<script>
const PI=3.14;
PI=2;//Uncaught TypeError: Assignment to constant variable.at let和const.html:28
</script>
const是声明一个常量,不可变,重新赋值则会报错。
<script>
var a=1;
var b=2;
//var str="哈哈哈"+a+"嘿嘿嘿"+b; //以前的写法
//console.log(str);//哈哈哈1嘿嘿嘿2
var str=`哈哈哈${a}嘿嘿嘿${b}`//ES6写法 哈哈哈1嘿嘿嘿2
console.log(str);
</script>
//无形参
var f=()=>5;
//等同于
var f=function(){return 5};
//多个形参
var sum=(num1,num2)=>num1+num2;
//等同于
var sum=function(num1,num2){return num1+num2;};
箭头函数的两个坑:1.this的指向发生了改变,指向定义对象时的对象window。2.arguments不能使用。
<script>
var person={
name:"张三",
age:18,
// fav:function(){
// console.log(this);
// }
fav(){console.log(this)}
}
person.fav();
</script>
解决箭头函数不能指向本身的问题。字面量方式创建对象。
<script>
//构造函数的方式来创建对象,面向对象
function Aniaml(name,age){
this.name=name;
this.age=age;
}
Aniaml.prototype.showName=function(){
console.log(this.name)
};//给对象增加方法
var dog=new Aniaml('日天',18);
dog.showName()
</script>
<script>
class Aniaml{
constructor(name,age){
this.name=name;
this.age=age;
}//构造方法,且后面不能加逗号
showName(){
console.log(this.name)
}
}
var d=new Aniaml('张三',19);
d.showName();
</script>