js学习1---定义变量预解析,作用域,函数预解析,es6行参默认值,匿名函数,箭头函数

    科技2024-01-31  91

    1.1:两种定义变量的方式区别

    通过var定义变量,可以重复定义同名的变量,并且后定义的会覆盖先定义的

    如果let定义变量,“相同作用域内”不可以重复定义同名的变量

    1.2:是否能够先使用后定义

    var可以先使用 后定义,预解析

    let不可以,报错,不会预解析

    1.3:能否被{}限制作用域

    将var定义的变量放到一个单独的{}里面,还是一个全局变量

    将let,是一个局部变量。

    在js中{}外面的作用域,作为全局作用域

    在js中函数后面{}的作用域,为局部作用域。

    在es6中只要{}没有和函数结合在一起,我们称之为块级作用域

    1.4块级作用域和局部作用域的区别

    在块级作用域中通过var定义的变量是全局变量

    在局部作用域中通过var定义的变量是局部变量

    1.5变量的作用域链

     

    函数预解析

    变量,函数声明放在最前面,然后按顺序执行。

    1.6 es6之前的定义函数的方式

     

    //es6之前定义 函数的形式,是会被预解析的,所以可以提前调用。

    function say(){ console.log('hello') }

     如果函数赋值给一个var定义的变量,那么函数不会被预解析,只有变量会被预解析

    say() var say = function (){ console.log('hello') } //报错say is not a function //预解析 var say; //undefined say(); say = function (){ console.log('hello') }

    不会预解析 

    say(); say is not defined //es6后 let say = ()=>{ console.log('hello') }

    注意点:1:在高级浏览器中,不会对{}中定义的函数进行提升

    2:如果变量名称和函数名称同名,那么函数的优先级高于变量。

     

    所以,不要让变量名称和函数名称重名。

     

    3:es6行参默认值

    es6之前,可以通过逻辑运算符来给行参指定默认值

    function getSum(a,b){ a=a||'111', b=b||'222' console.log(a,b) }

     es6开始,可以直接在行参后面通过=指定默认值

    function getSum(a="111",b="222"){ console.log(a,b) }

    也可以从其他函数中获取

    function getSum(a = "111",b = getDefault()){ console.log( a , b) } function getDefault(){ return '111' }

    4:匿名函数

    没有名称的函数就是匿名函数,不能够只定义不使用。

    应用场景:

    4.1作为其他函数的参数

    4.2作为其他函数的返回值

    4.3作为一个立即执行的函数

    (function(){ console.log('111') })(); //需要用()把函数包裹起来后,再加(),立即执行

    5:箭头函数

    1:如果函数中只有1个行参,()可以省略,如果{}中只有一句代码,{}可以省略。

    let say = (name) => { console.log('111') } let say = name => console.log('111')

     

    Processed: 0.010, SQL: 8