• js中函数带不带var的本质区别是什么


    本质区别是:带var的是定义,属于statement;不带var的是赋值,属于expression。不带var时,解释器认为变量已经定义过了,会在函数中找相应的定义,如果找不到,就会认为变量是在外一层定义的(即字数体外),如果在最外一层也没有定义,这个时候就没有办法,只能在外面强行自己定义一个变量了,这个定义是隐藏的。需要注意的是,我们学说的函数的定义,即形如 function add(a,b){return a + b;}这样的语句,其实只是声明引用,属于statement,这个时候函数是没有执行的,所以一定要中调用函数后,相应的没有用var修饰的变量才会在最外层隐式定义。下面的代码说明了这一点:

     1  > function add(){
     2  ... a=3}
     3 undefined
     4 > a
     5 ReferenceError: a is not defined
     6      at repl:1:1
     7      at sigintHandlersWrap (vm.js:22:35)
     8      at sigintHandlersWrap (vm.js:73:12)
     9      at ContextifyScript.Script.runInThisContext (vm.js:21:12)
    10      at REPLServer.defaultEval (repl.js:340:29)
    11      at bound (domain.js:280:14)
    12      at REPLServer.runBound [as eval] (domain.js:293:12)
    13      at REPLServer.<anonymous> (repl.js:538:10)
    14      at emitOne (events.js:101:20)
    15      at REPLServer.emit (events.js:188:7)
    16  > add()
    17  undefined
    18  > a
    19  3
    20  >

     因为带var是定义,属于statement。不带var是赋值,属于expression,所以在IIFE中在应用时,也是有区别的。前者不能实现IIFE,后者可以:

    1 > (var a=function(){return 2})()-1
    2 ...
    3 ...
    4 > (a=function(){return 2})()-1
    5 1
    6 >

    下面的说句更能说明带var是statement,不带是expressioin:

    1 > var a=2
    2 undefined
    3 > b=3
    4 3
    5 >

    带了var的返回了undefined,而不带的却返回了一个会,说明b=3这个语句是一个expression,所谓expression,就是会产生一个值语句,这个语句可以作为参数传给其它语句,成为其它语句的变量。

    > var a=2
    undefined
    > b=3
    3
    > function add(a,b){return a+b}
    undefined
    >
  • 相关阅读:
    逻辑指的是思维的规律和规则,是对思维过程的抽象。
    逻辑
    什么是概念,判断和推理
    逻辑思维
    console.log 用法
    console.log()的作用是什么
    vue-cli创建的项目中引入第三方库报错 'caller', 'calle', and 'arguments' properties may not be...
    element-ui中upload组件如何传递文件及其他参数
    vueThink权限配置
    vue2.0集成百度UE编辑器,上传图片报错!!!
  • 原文地址:https://www.cnblogs.com/JMLiu/p/7198960.html
Copyright © 2020-2023  润新知