一、var与let
var是函数级作用域,没有块级作用域
{
var a =10
}
console.log(a) //10
- 变量i是全局的,函数执行时输出的都是全局作用域下的值。函数执行时,循环已经结束,i是不满足循环条件的值
var arr = []
for (var i = 0; i < 2; i++) {
arr[i] = function () {
console.log(i)
}
}
arr[0]()
arr[1]()
// 2
// 2
当i为let时,结果为0,1.块级作用域
二、function* 生成器
1.fibnaci数列
1.1
function fib(max) {
var a = 0, b = 1, arr = [0, 1]
while (arr.length < max) {
[a, b] = [b, a + b]
arr.push(b)
}
return arr
}
console.log(fib(10))
/*[
0, 1, 1, 2, 3,
5, 8, 13, 21, 34
]
1.2 function* 生成器
yield有值返回时,为false。
function* fib1(max) {
let a = 0, b = 1, n = 0
while (n < max) {
yield a; //此处;不可省略
[a, b] = [b, a + b]
n++
}
return
}
// let f = fib1(5)
// console.log(f.next())
// console.log(f.next())
// console.log(f.next())
// console.log(f.next())
// console.log(f.next())
// console.log(f.next())
for (let x of fib1(10)){
console.log(x)
}
/*0
1
1
三、map
- 请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']
function normalize(arr) {
return arr.map(x=> x[0].toUpperCase()+x.slice(1).toLowerCase()) //slice或substr
}
网友评论