var与let、const的区别
-
var
声明的变量会挂载到window上,而let
和const
声明的变量不会,即var
声明的均为全局变量。 -
var
声明变量存在变量提升,let
和const
不存在变量提升,即var
定义的变量可以先使用后定义 -
let
和const
声明形成作用域,只能在本作用域中使用即该{}
内 -
同一作用域下
let
和const
不能声明同名变量,而var
可以 -
暂存死区
`var` a = 100; if(1){ a = 10;//就近原则 //在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a, // 而这时,还未到声明时候,所以控制台Error:a is not defined let a = 1; }
-
const
- 一旦声明必须赋值,不能使用
null
占位 - 声明后不能再修改
- 如果声明的是复合类型数据,可以修改其属性,如数组、对象
通过
var
声明的变量有初始值undefined
,而通过let
声明的变量直到定义的代码被执行时才会初始化 - 一旦声明必须赋值,不能使用
generator函数
generator
(生成器)是ES6
标准引入的新的数据类型。一个generator
看上去像一个函数,但可以返回多次。
定义如下:
function* foo(x){
yield x+1;
yield x+2;
return x+3;
}
generator
和函数不同的是,generator
由function*
定义,除了return
语句,还可以用yield
返回多次
generator
和普通函数相比,有什么用?
generator
可以在执行过程中多次返回变量状态的函数- 把异步回调代码变成“同步”代码,使代码变得有层次感,不需要大量的嵌套
try {
r1 = yield ajax('http://url-1', data1);
r2 = yield ajax('http://url-2', data2);
r3 = yield ajax('http://url-3', data3);
success(r3);
}
catch (err) {
handle(err);
}
async函数
ES2017
标准引入了 async
函数,使得异步操作变得更加方便。async
函数是 generator
函数的语法糖。
async
函数对 generator
函数的区别:
-
内置执行器
generator
函数的执行必须靠执行器,而async
函数自带执行器。也就是说,async
函数的执行,与普通函数一模一样,只要一行。 -
更好的语义
async
和await
,比起*
和yield
,语义更清楚了。async
表示函数里有异步操作,await
表示紧跟在后面的表达式需要等待结果。 -
正常情况下,
await
命令后面是一个Promise
对象。如果不是,会被转成一个立即resolve
的Promise
对象。 -
返回值是
Promise
async
函数的返回值是Promise
对象,这比generator
函数的返回值是Iterator
对象方便多了。你可以用then
方法指定下一步的操作。
进一步说,async
函数完全可以看作多个异步操作,包装成的一个Promise
对象,而await
命令就是内部then
命令的语法糖。
获取select下拉框参数
form
表单提交时,浏览器根据"select的名字 =被选择的option的value"
这种形式,放入http url
的请求报文中,若有多个,我们Q在服务器端可以用List<value的类型>
方式接收这些数据
prop和attr的使用
对于HTML
元素本身就带有的固有属性,在处理时,使用prop
方法。
对于HTML
元素我们自己自定义的DOM
属性,在处理时,使用attr
方法。
checkbox的使用
//让某个icon的checkbox被选中
$("#div1 :radio[value='"+value1+"']").attr("checked",true);
//获取多个checkbox被选中的icon值
const ckbs = $("#div1 [name='value1']:checked").val();