首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS if 函数声明提升

在ES6非严格模式下, 块函数声明会出现提升, 所以最好使用函数表达式来定义函数 ---- 走走流程看看到底发生了啥 我们可以先把, function a () {}注释掉, 可以看到报错了, Uncaught...ReferenceError: a is not defined, 所以if里函数声明确实存在变量提升 ?...然后, 我们可以打点调试一下 在if a=1语句之前, 我们可以看到函数声明已经提升了, 此时if作用域里a为函数 ? 而全局a还是undefined ?...在运行到 function a () {} 后, 我们可以看到, 块级作用域a值会赋值给全局作用域a ?...随后运行a=5, 则只是在块级作用域里赋值, 不会对全局作用域a值进行修改 ---- 当然, 如果使用函数表达式来声明函数的话, 可以避免 var a if (true) { console.log

3.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS 声明

    声明和未声明变量之间差异是: 声明变量作用域限制在其声明位置上下文中,而非声明变量总是全局。...变量提升 由于变量声明(以及其他声明)总是在任意代码执行之前处理,所以在代码任意位置声明变量总是等效于在代码开头声明。这意味着变量可以在声明之前使用,这个行为叫做“hoisting”。...let let不会在全局声明时(在最顶部范围)创建window 对象属性。 let允许你声明一个作用域被限制在 块级变量、语句或者表达式。...作用域规则 let声明变量只在其声明块或子块可用,这一点,与var相似。二者之间最主要区别在于var声明变量作用域是整个封闭函数。...该变量处在一个自块顶部到初始化处理“暂存死区”。 所以说变量一定要先声明, 后使用.

    2.5K10

    js函数声明你真的会了吗???

    答案:undefined 30 报错:b is not defined 解析:1、没有用var声明是全局变量,即便在函数内部; 2、只有在function内部新声明才是局部变量,在if,while,...for等声明变量其实是全局变量(除非本身在function内部) 3、因为变量提升,虽然if块内容没执行,但是预解析阶段会执行var a,只是没有赋值而已,因此打印a是undefined而打印b会报错...在任何时代, 教育说起来都是一件高大上事, 但却没有什么真正有价值东西是教得会, 没有任何一种文化模因 可以说清楚一个个体全部问题。...在任何时代, 在一秒钟内看到本质的人, 和花半辈子看不清的人, 自然是不一样命运。 每一天,你将受到才哥理论,结合历史、政治、文化、艺术、商业故事,令人防不胜防高纯度无死角知识轰炸。...那时候相忘于江湖事,或许穿越了时光,有了新世界 那时候不远万里追寻的梦,也许穿行过人海,也有了新意义 而对于我们来说,那个惦念江湖,那个执着梦,其核心都是在偌大世界里,寻找到更真实更好自己

    1.6K20

    JS函数声明与函数表达式异同

    这里就涉及到了函数传递,函数传递是传引用,就是说函数存在内存某个位置,nameAlert和anotherNameAlert是都是函数一个引用,把函数名nameAlert赋值给anotherNameAlert...-- function body --> } 函数声明会提前 函数声明是在预执行期执行,就是说函数声明是在浏览器准备执行代码时候执行。....'); } ECMAScript规范中表示,函数声明语句可以出现在全局代码,或者内嵌在其他函数,但是不能出现在循环、条件判、或者try/finally以及with语句中。...; })() 事实上,js解析器对函数声明与函数表达式并不是一视同仁地对待。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型变量一样,只在执行到某一句时也会对其进行解析,所以在实际,它们还是会有差异,具体表现在,

    1.2K50

    JS函数声明与函数表达式不同

    Js函数声明是指下面的形式: function functionName(){ }         这样方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName...= function(){ }         可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用貌似也都是可行,那他们有什么差别呢?       ...事实上,js解析器对函数声明与函数表达式并不是一视同仁地对待。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型变量一样,只在执行到某一句时也会对其进行解析,所以在实际,它们还是会有差异,具体表现在,...当使用函数声明形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。

    1.4K20

    高难度函数声明 int (*(*pf( )) ( ) ) ( ) 了解一下?

    各位,当你看到上面的函数声明int (*(*pf( )) ( )) ( )时是不是头都大了?那它究竟表示是什么意思呢?今天我们就拿它分析一下。...关于这种复杂声明,在分析之前有两点原则: 1.要确定声明中出现操作符优先级, 2.要确定在声明中标识符与某个操作符结合起来时候有什么意义,并由内向外逐步来解读....还有一点需要大家特别注意:当指针解引用操作符*与一个表示函数标识符结合时,表示这个函数返回值是一个指针。例如 *a() 表示a是一个返回值为指针函数。 有了以上几点说明,那我们就开始吧: ?...怎么样,到这里应该很清楚了吧,所以说见到这种复杂冗长声明不要怕麻烦,由内到外一步一步分析,到最后你会发现不过如此,希望对大家有所帮助,感谢耐心阅读!

    43220

    聊聊Mysqlint(1)

    昨天有个读者问了我这样一个问题在mysql建表时候,我设置一个字段为int类型,长度为1,但是我发现这个字段却可以存储任意长度数字,这是什么情况?...int 类型占 4 个字节,一个字节是 8 位,也就是说 int 类型在计算机底层是由 32 个 0 跟 1 表示,转化为十进制就是 2 32 次方,那么存储范围就是 0~2^32 ,如果带符号位的话就是...现在再来看看这个int(1)1究竟有什么奥秘。这个1跟这个字段能存数据范围没关系,它也不是限制这个字段数据长度。这个字段存储数据范围是由int来限制。...比如我们将int(1)改成int(3),我们再输入1,实际上显示是001。所以无论你将 int 类型长度设为多少并不会影响数据存储范围。...mysql对于整型数据类型,不仅给我们提供了int,还提供了tinyint,smallint,mediumint和bigint。

    1.9K20

    js构造函数和普通函数区别_函数声明和函数定义

    大家好,又见面了,我是你们朋友全栈君。 1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2、构造函数和普通函数区别在于:调用方式不一样。...普通函数调用方式:直接调用 person(); b.构造函数调用方式:需要使用new关键字来调用 new Person(); 4、构造函数函数名与类名相同:Person( ) 这个构造函数...A、立刻在堆内存创建一个新对象 B、将新建对象设置为函数this C、逐个执行函数代码 D、将新建对象作为返回值 6、普通函数例子...,是则返回true; 所有对象都是Object对象后代,所以任何对象和Object做instanceof都会返回true 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    3.2K10
    领券