var result=0;
function test(result){
result=1;
}
test(2);
函数作用域下的变量在函数执行结束后就释放了.
result在方法内作为形参它的作用域仅限于这个方法,因此方法内的result=1并不会更改外界的result值
function Test(name) { }
Test.name='Tom';
Test.prototype.name="John";
var result = (new Test('JK')).name;
不选Tom的原因是, 在ES5语法里, 构造函数的属性和方法必须放到函数的原型上, 实例才继承得到.
有关滚动条ScrollHeight滚动内容高度。clientHeight可视内容高度 ScrollTop滚动过的高度
- ES6新特性
1、let 和 const 的块级作用域
let 关键字禁止变量提升,要先定义后使用,而且只作用于它所定义的块级作用域中,常用于for 或 if 之类的结构中。
const 是在let 的基础上添加了一个只读属性,即变量一旦声明过后就不允许在修改,这里是不允许修改定义的地址,而不是不可以修改他内部的属性值。
2、数组的解构、对象的结构
const arr = [100, 200, 300]
// 都获取
const [a, b, c] = arr // a = 100 b = 200 c = 300
// 只获取特定的值
const [, , c] = arr // c = 300
// 对于的数组长度超过,会返回undefined
const [a,b,c,d,e] = arr // a = 100, b = 200 c = 300 d = undefined e = undefined
// 还可以设置默认值
const [a,b,c,d = 400,e = 500] = arr // a = 100, b = 200 c = 300 d = 400 e = 500
3.默认参数和剩余参数
function add (a = 0 ,b = 1) { }
这里要说明的是,一定要将有默认值的参数放到没有默认值参数的后面位置(即出现在参数列表的最后),因为我们的参数是按照次序传递的,如果没有放到最后,我们的默认值将无法正常工作
1、剩余操作符,用来接收从当前位置剩余参数的操作。 新增了...的操作符
function redece (...arg) {
console.log(arg) // 这里的arg是一个伪数组,是传递进来的实参数组,并且这个操作只能放到最后一个参数的位置上进行(只能使用一次),否则影响前面参数
}
const arr = ['foo', 'fn', 'functions']
console.log(...arr) // ES6(spread)写法
4.箭头函数
箭头函数 (参数列表)=> {函数体} ,在函数体中只有返回值的情况下, 大括号可以省略。
const fn = n => n+1
const fn1 = (n = 3, m = 2) => {
return n + m
}
箭头函数的特点:
1、简化的函数的书写格式,使函数看起来更加容读和书写
2、它没有this的机制,不会改变this的指向,任何情况下都不会改变
5 、对象字面量的增强
对于对象用法的增强,主要表现在:
1、如果想给对象的属性赋值一个变量值,并且该变量名和属性名一样,则可以省略写法。
2、在对象中的方法也可以省略写,当方法名和属性名相同时,省略冒号,这里的this是指向调用对象方法的对象
3、对于属性名的命名,必须使用明确的值,在es2015中,可以使用[]的方式对对象属性名进行命名
const name = 'df'
// 1、
const obj = {
foo: 'foo',
name //这里的name名字相同,可以省略写
// 2、
// fn : function fn () {console.log('eeeee...')}
// es2015中可以用
fn () {console.log('eeeee...')}
}
// 3、
// obj.Math.random():123 //写法是错误的
// obj[Math.random()]:123
// 在es2015中,新增了写法
obj[Math.random()] = 123
BigInt 是一种内置对象,它提供了一种方法来表示大于 2^53 - 1 的整数
Eventloop(JS执行机制)
console.log(1)
const promise=new Promise((resolve,reject)=>{
console.log(2)
resolve()
})
console.log(3)
setTimeout(() => {
console.log(4)
}, 0);
promise.then(()=>{
console.log(5)
})
setTimeout(() => {
console.log(6)
}, 0);
console.log(7)
// 定时器是宏任务,Promise是微任务,但promise里是同步的,.then才是异步执行
//1 2 3 7 5 4 6