let关键字
// console.log(username);//当下一行是let时,没有预解析,会报错 当下一行是var时,不会报错,但值是undefined
let username = 'kobe';//
// let username = 'wade';//不能重复定义
// console.log(username);
//循环遍历加监听
let btns = document.getElementsByTagName('button');//获取三个btn
for(var i=0; i var btn = btns[i];//——> 拿到其中的一个btn = btns的下标为i的元素 // 无法获取正确的索引 btn.onclick = function() { alert(i); }; //方法一:把for(var i=0; i /*方法二:闭包的方式解决 (function (i) { btn.onclick = function () { alert(i); } })(i);//利用闭包的原理,后面带括号,就是要立即执行 */ } const关键字
// var KEY = 'NBA';//var可修改
// KEY = 'CBA';
// console.log(KEY);//CBA
const KEY = 'NBA';//const不可修改
// KEY = 'CBA';//当为把var换成const时,不能写,会报错
console.log(KEY);
变量的解构赋值
let obj = {username: 'kobe', age: 40};
// let username = obj.username;
// let age = obj.age;
// let xxx = obj.xxx;//undefined
// 对象的解构赋值
// 在解构赋值的时候,大括号里左边向右边要值的时候,必须是obj里已有的属性才可以,没有的话,返回的是undefined
// let {username, xxx} = obj;//相当于let xxx = obj.xxx;//undefined
// let {username, age} = obj;//相当于let age = obj.age;
// console.log(username, age);//kobe 40 意味着username和age是全局变量
// 当不想全要时,例如:只要年龄
let {age} = obj;//声明了一个全局变量age
console.log(age);
//数组的解构赋值
let arr = [1,3,5,'abc',true];
// let [a,b,c,d,e] = arr;//全局定义了5个变量
// console.log(a,b,c,d,e);
// let [a,b] = arr;
// console.log(a,b);//1 3
let [,,a,b] = arr;
console.log(a,b);//5 'abc'
//多个形参来赋值
// function foo(obj){
// console.log(obj.username, obj.age);
// }
function foo({username, age}){//{username, age} = obj;
console.log(username, age);
}
foo(obj);//kobe 40
模版字符串
let obj = {username: 'kobe', age: 40};
//方式一:
// let str = '我的名字叫:' + obj.username + ',我的年龄:' + obj.age;
//方式二:(简单)
str = `我的名字叫:${obj.username},我的年龄:${obj.age}`;
console.log(str);//我的名字叫:kobe,我的年龄:40
// `https://s.taobao.com/search?q=${obj.xx}&refpid=${obj.xx}&source=${obj.xx}&style=${obj.xx}&pvid=${obj.xx}&clk1=${obj.xx}&spm=${obj.xx}`