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

JS if 中函数声明提升

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

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

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中构造函数和普通函数区别_函数声明函数定义

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

3.1K10

JS 声明

用 var 声明变量作用域是它当前执行上下文,它可以是嵌套函数,也可以是声明在任何函数变量。如果你重新声明一个 JavaScript 变量,它将不会丢失其值。...简而言之, var声明变量只能是全局或者整个函数。 将赋值给未声明变量值在执行赋值时将其隐式地创建为全局变量(它将成为全局对象属性)。...“hoisting”就像是把所有的变量声明移动到函数或者全局代码开头位置。...作用域规则 let声明变量只在其声明块或子块中可用,这一点,与var相似。二者之间最主要区别在于var声明变量作用域是整个封闭函数。...console.log(a); // 11 console.log(b); // 22 } console.log(a); // 11 console.log(b); // 2 而这种var 与 let合并声明方式会报

2.5K10

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

相同点 注:函数声明函数表达式相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出、被赋值、作为参数传给其他函数等相关操作,不管函数是以什么方式被定义,当然和其他值输出还是有些区别的...不同点 注:函数声明函数表达式不同点包括但不限于以下几点 相对函数声明函数表达式之间相同点,它们不同点更应该值得我们关注。下面我结合自己理解聊聊。...-- function body --> } 函数声明会提前 函数声明是在预执行期执行,就是说函数声明是在浏览器准备执行代码时候执行。...; })() 事实上,js解析器对函数声明函数表达式并不是一视同仁地对待。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异,具体表现在,

1.1K50

JavaScript(js函数声明函数表达式区别

在JavaScript中,函数是经常用到,在实际开发时候,我想很多人都没有太在意函数声明函数表达式区别,但是呢,这种细节东西对于学好js是非常重要。...函数声明函数表达式用代码写出来是这样: //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){...console.log("函数表达式") } 那我们来看看,这两种方式到底有什么不同呢?...首先,在函数调用方面,看下面的代码 say(); //函数声明 function say(){ console.log("函数声明") } 这样执行结果是什么呢?...一起来看看,首先我们先说第一种,函数声明调用,函数声明调用这个其实不用讲你就知道,函数声明了嘛,哪里都可以调用(function会有预解析,预解析之后函数就存在了,所以那里都能调用它了)。

79030

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

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

1.4K20

函数(三)(函数声明

函数声明 C语言函数调用要求是先定义后使用,就是要求被调用函数定义在主调函数之前。 如果在程序中自定义函数时,需要将被调函数定义在主调函数后面,就需要函数调用之前加上函数原型声明。...如果在函数调用之前既无函数定义,也无函数声明,编译时会出错。 函数原型声明一般形式: 类型说明符 函数名(形式参数声明列表); 例:定义计算圆面积函数,在主函数中输入半径并计算面积。...return ; } double circle(double radius) { return PI * radius * radius; } 函数声明函数名后面的圆括号中可以只给出形参类型...,省略形参名称。...例如本例中第5行函数声明可以写成如下形式: double circle(double); 如果在源程序文件开头部分,所有函数定义前面进行函数声明,则该源程序文件中所有的函数都可以调用被声明函数

60910

JS函数表达式和函数声明你混淆了吗?

在 JavaScript 中,function关键字可以完成一个简单工作:创建一个函数。 但是,使用关键字定义函数方式可以创建具有不同属性函数。...其原因是sumA是使用函数声明创建,该函数声明在当前作用域中创建一个函数变量(具有与函数名称相同名称)。...例如,编写一个函数 sumArray(array),以递归方式累加一个数组项(该数组可以包含数字或其他数组): sumArray([10, [1, [5]]]); // => 16 function...由于提升,函数变量在函数声明之前可用。 2.1 函数声明注意事项 函数声明语法作用是创建独立函数函数声明应在全局作用域内,或直接在其他函数作用域内: // Good!...总结 根据使用function关键字创建函数方式,可以通过两种方法来创建函数函数声明函数表达式。

70830

JS 匿名函数——几种不同调用方式

匿名函数声明和使用 匿名函数有两种用法: 赋值 自我执行 1.声明一个匿名函数,直接赋值给某一个事件 windon.onload = function(){ alert('...,函数调用语句,必须放在函数声明语句之后!!!...原因:检查装载时,会先对show变量及这个匿名函数声明,此时,还未将匿名函数赋值给show变量,如果在表达式之前调用,会报错 show is not a function js代码执行顺序问题 js...检查装载阶段:会先检测代码语法错误,进行变量、函数声明 执行阶段:变量赋值、函数调用等,都属于执行阶段。 3.自执行函数。这里我总结了8种常用匿名函数调用方法: //1.使用 !...function(){ document.write('ni hao'); }() //2.无法表明函数与之后()整体性,不推荐使用。

3.9K10

javascript两种声明函数方式一次深入解析

声明函数方式 javascript有两种声明函数方式,一个是函数表达式定义函数,也就是我们说匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME...方式声明方式是先声明后使用 方式声明方式可以先调用,后声明 /*方式一: *先声明后使用 */ //f1();这里调用就会出错 var f1 = function () {...*/}; /* 这种方式,编译后变量声明 FUNCTION_NAME 会“被提前”了,但是他赋值(也就是FUNCTION_BODY)并不会被提前。...即函数声明过程在整个程序执行之前预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。...alert (‘2’);主要原因是JavaScript 函数声明“提前”行为,简而言之,就是Javascript允许我们在变量和函数声明之前使用它们,而第二个定义覆盖了第一种定义。

49220

Kotlin:02-函数声明

名称自定义,你想叫啥就叫啥 args 该函数参数。如果某个函数有多个参数,使用逗号间隔 : 声明参数类型声明符。...) 这是函数主体,你想让函数实现什么功能就写出对应代码即可 以上就是 函数声明基本格式,以后我们在声明函数时候也需要遵守上面的格式。...2、函数有返回值 (1)、显示声明返回值类型 如果某个函数有返回值,那么就需要在函数声明声明其返回值类型,示例代码如下: fun sum(a: Int, b: Int): Int { return...a + b } 在上面的代码中,我们定义了一个 求和函数,接收两个 Int 类型参数,返回值是两个参数和,由于得到和 是 Int 类型数据,所以该函数返回值类型就是Int,这个返回值类型就需要在函数声明...,否则会报错,报错状态如下: 返回值类型不匹配 (2)、隐式声明返回值类型 对于上面 显示声明返回值类型 中示例代码,还有一种简写方式,如下: fun sum(a: Int, b: Int) = a

56630
领券