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

JS的 if 中的函数声明提升

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

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

3.1K10

第24天:js-函数变量声明提升

一、函数声明 1、自定义函数 function fun1(){ alert("我是自定义函数"); } fun2();//函数不调用,自己不执行 2、直接量声明 var fun2=function()...{ alert("直接量声明"); } fun2(); 3、利用Function关键字声明 var fun3=new Function("var a=10;b=20;alert(a+b)"); fun3...(); 二、变量声明提升 如果在一个函数体内部声明一个变量,不管这个变量函数外部有没有,先执行函数内部的变量,会将变量声明提升到函数开始部分,但是不会赋值。...在函数体内部声明变量,会把该声明提升到函数体的最顶端。但是只提升变量声明,不赋值。...函数实参个数要与形参个数相同,arguments.length可以获取函数实参的个数 1 <!

1.8K10

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函数声明函数表达式的异同

的时候,它们引用的都是同一个函数。...函数声明提前是它们很大的一个不同点,理解这一点对于我们函数的应用有很大帮助,能使我们避免一些错误。 sayTruth();<!...对于这条,可能会有所疑问:“上文不是有一个函数声明出现在if循环中的么”。的确是这样,但是规定下发了,遵守不遵守就是另一回事了。...; })() 事实上,js的解析器对函数声明函数表达式并不是一视同仁地对待的。...对于函数声明js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,

1.1K50

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

在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数声明函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的。...函数声明函数表达式用代码写出来是这样的: //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){...一起来看看,首先我们先说第一种,函数声明的调用,函数声明的调用这个其实不用讲你就知道,函数声明了嘛,哪里都可以调用的(function会有预解析,预解析之后函数就存在了,所以那里都能调用它了)。...undefined,这是不是很像我们的函数表达式了,其实,如果说我们在函数表达式之前也打印一下这个say1(),结果也是undefined,原因就是带有var 的变量,当然这里说的是全局变量,它在预解析的时候会有一个变量提升...,变量提升是什么意思呢,看上面这段代码,其实就相当于下面这段代码 var a; console.log(a); a=1; 现在知道了吧,a这个变量是存在的,并且初始化成了一个undefined,所以说我们的函数表达式也是一样的

79030

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

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

1.4K20

函数(三)(函数声明

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

60910

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

在 JavaScript 中,function关键字可以完成一个简单的工作:创建一个函数。 但是,使用关键字定义函数的方式可以创建具有不同属性的函数。...其原因是sumA是使用函数声明创建的,该函数声明在当前作用域中创建一个函数变量(具有与函数名称相同的名称)。...2.函数声明 在前面的示例中已经看到的,sumA是一个函数声明: // Function declaration function sumA(a, b) { return a + b; } sumA...(4, 5); // => 9 当一个语句包含function关键字,后跟函数名称,一对带参数的括号(param1, param2, paramN)以及包围在一对花括号{}中的函数主体时,就会发生函数声明...函数声明会创建一个函数变量:一个函数名称同名的变量(例如,上一个示例中的sumA)。 在当前作用域中(在函数声明之前和之后),甚至在函数作用域本身内,都可以访问该函数变量。

70830

【JavaScript】函数 ① ( 函数引入 | 函数声明 | 函数调用 )

, 使代码更加清晰和易于维护 ; 函数 的 目的 就是 重复使用代码 ; 使用函数 就是 声明函数 和 调用函数 ; 2、函数声明 在 JavaScript 中 , 使用 function 关键字 声明函数...是 传递给函数的 形式参数列表 , 这些 形式参数 在 函数体代码中 可与作为局部变量使用 ; 代码示例 : // 声明函数 function hello(name) {...`); } 在上述代码中 , 声明一个名为 hello 的函数 , 该函数接受一个参数 name , 在函数体中 使用 console.log 在 浏览器 命令行 中 打印出 Hello...字符串 ; 3、函数调用 函数声明后 , 本身不会自动执行 函数体中的代码 , 只有 调用函数后 , 才会执行 函数体代码 ; 函数调用 语法格式 : functionName(argument1, argument2...是传递给函数的 实参列表 , 该 实参列表 与 函数定义的 形参列表一一对应 , 这些实际参数值值将替换函数定义中的形式参数 , 并在函数执行时 作为 函数体的 局部变量 使用 ; 4、代码示例 - 函数声明调用

9010

JavaScript: 函数式编程 - 声明函数

- 代码组合的优势 3-了解 JavaScript 函数式编程 - 声明函数 4-了解 JavaScript 函数式编程 - 类型签名 声明声明式代码 什么是声明式,我们将不再指示计算机如何工作...使用 map 的版本是一个表达式,它对执行顺序没有要求。而且,map 函数如何进行迭代,返回的数组如何收集,都有很大的自由度。它指明的是做什么,不是怎么做。因此,它是正儿八经的声明式代码。...声明式最重要的是不是指定执行顺序,所以它天然的适合进行并行运算。它和纯函数一起解释了为何函数式编程是未来并行计算的一个不错的选择 -- 我们真的不需要做什么就能现实一个并行/并发系统。...上面这句话有点难以理解,我们来看一个栗子 let meetup = {name:'JS',isActive:true,members:49}; const scheduleMeetup = (date,...所以我们需要纯函数声明函数来隔离这种无用的错误。 为什么使用声明式方式的函数函数? 在纯函数中,我们总是能保证我们的输出。 低复杂度,我们只需要考虑的是他是做什么的,而不是在乎过程怎么完成的。

1.3K30

js对象转数组_声明一个string类型的数组

先给个案例体验下 对于像这样的一个对象,把它转换成一个数组,我们在开发中应该会遇到过, {‘未完成’:0, ‘已完成’:1, ‘待确认’:2, ‘已取消’:-1}转为[{“未完成”:0},{“已完成...”:1},{“待确认”:2},{“已取消”:-1}] 我们首先想到的是把他们一个个循环遍历取出来,push到一个数组当中去 let obj1 = { '未完成': 0, '已完成': 1, '待确认...类数组对象: 拥有length属性,其它属性(索引)为非负整数 不具有数组所具有的方法 常见的类数组有arguments和NodeList, 《javascript权威指南》里面给出了一个鉴别对象是否是类数组的函数...:isFinite() 函数用于检查其参数是否是无穷大。...Object.entries(object4); // console.log(array4); // console.log(array41); // console.log(array42); 大概就是这些了 版权声明

2.5K30

python 函数声明和调用

一.函数的定义 在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回;如果没有return语句,默认返回...None: def functionname( parameters ): "函数说明" function_suite return [expression] 例如:写一个函数输出’hello...注意:函数在调用之前必须先声明。python中的内置函数如:print/type函数等等已经在python编译器内部声明并且定义好了,我们只管调用即可,不需要关心具体内部如何实现。...print("hello world") custom_print() 输出结果: hello world hello world hello world 代码分析:代码执行到第15行时,编译器发现这是一个函数声明...列表推导式 3.python字典推导式 4.python 函数不定长参数 *argc,**kargcs 转载请注明:猿说Python » python函数声明和调用

3.4K01

【基于JS 函数式编程 -1】什么是函数式编程 | 纯函数 | 命令式与声明式 | 优点

据此,我们可以归纳一个函数函数必须接受一个参数 函数必须返回一个函数应该根据接收到的参数(如:X)运行,而不是外部参数/环境(关键) 对于一个给定的X,只会输出唯一的一个Y(关键) 在编程语言中...例如,在对象中定义的函数,就是该对象的方法。 引用透明性 前面我们提到: 对于一个给定的X,只会输出唯一的一个Y。即所有的函数,对于相同的输入,将返回相同的值。这一性质被称为引用透明性。...因为,具有引用透明性的函数,只能依赖来自参数的输入,我们可以轻松地用多线程运行这样的代码,没有任何锁机制。 编程范式之 命令式 与 声明式 首先我们要理解什么是命令式,什么是声明式。...如何做的部分,将被抽象到普通函数(也称”高阶函数,如forEach()“)中。如下代码,我们使用声明式方式改写上面的命令式代码。...例如: let double = (value) => value*2 ; 这是一个简单的纯函数,我们给它一个输入,它返回相同的输出。 可见,纯函数遵循”引用透明性“。

20510
领券