以前忽略了的 函数定义表达式【提升】 的小细节

区别函数定义的两种方式:

var foo = function() {}     //函数定义表达式

function foo() {}              //函数声明语句

  前者有提升现象,后者没有。

众所周知,javascript在中有 “变量提升”的现象——在变量声明之前使用该变量就会报错;原因是因为js 是从上到下执行,在使用一个还未定义的变量所以就会报错!

同理:

foo()var foo = function(){ console.log(1) }

=> VM3022:1 Uncaught TypeError: foo is not a function

at <anonymous>:1:1

  上述中的函数表达式,函数名是一个变量名,变量指向函数对象。和通过var声明变量一样,也会造成提升。foo()还未定义所以报错;

新发现:

function foo1() {foo()}
var foo = function(){ console.log(1) }

foo1()

//输出: 1

造成提升的真正原因是: javascript是从上到下执行的,由于执行到未定义的变量时就会报错,然而这里的 foo(),虽然写在前面,但是并没有执行。真正的执行,在最后。而在那个时候,代码已经完成了定义,所以不会报错。

不过最好的写法是使用函数声明语句

时间: 2024-10-10 01:37:58

以前忽略了的 函数定义表达式【提升】 的小细节的相关文章

[转]javascript函数定义表达式和函数声明的区别

在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ return x; } 尽管函数定义表达式和函数声明语句包含相同的函数名,并且都创建了新的函数对象,但是这二者却有区别. 函数声明语句中的函数名是一个变量名,变量指向函数对象. 函数定义表达式和通过var声明变量一样,其函数被提前到了脚本或函数的顶部,因此它在整个脚本和或函数内都是可见的.这样的话

javascript函数定义表达式

函数定义表达式定义一个JavaScript函数.表达式的值是这个新定义的函数.从某种意义上讲,函数定义表达式可称为"函数直接量",毕竟对象初始化表达式也称为"对象直接量".一个典型的函数定义表达式包含关键字function,跟随其后的是一对圆括号,括号内是一个以逗号分割的列表,列表含有0个或多个标识符(参数名),然后再跟随一个由花括号包裹的JavaScript代码段(函数体),例如: //这个函数返回传入参数值的平方 var square = function(x)

Python 的lambda表达式的一些小细节

温故而知新,无意中发现以前实验lambda的时候写的测试代码,第一个反映就是,这是我写的????!!! 呵呵,想想XX语言刚把lambda正式加进去,python早早支持了,我可以大喊一声”Python是最好的语言“来找找骂吗? 哈哈. 不过,自从有了lambda,很多代码一行搞定.不过还是有很多不为一般人注意的小细节,详见下面代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3

函数定义、调用

函数定义: 1.函数定义表达式: def  函数名(参数):                函数体 2.函数体内部返回结果一般使用:return x ,可返回多个结果,实际上是返回一个tuple(在语法上,返回tuple可省略括号) 3.输入参数类型检查可用:instance() 4.函数定义的参数,除了正常定义的必选参数外,还可以使用 默认参数(x=1 一定要是不可变对象).可变参数(*args 传入的是一个tuple).关键字参数(**kw 传入的是一个dic)和,命名关键字参数(需要一个特

关于JS中的函数定义及函数表达式

在初学JS的过程中,老是不能区别什么是函数表达式什么是函数定义,这对基础知识的夯实是不利的.因此查阅资料,认真对其进行了区别. 简单总结如下: 1.区别一:以function开头的函数纪委函数定义,其他则为函数表达式: 2.区别二:函数表达式可以省略函数名. function FunctionName(FormalParameterList) { FunctionBody } //函数定义 function [FunctionName](FormalParameterList) { Functi

JS中函数定义和函数表达式的区别

摘要: (function() {})();和(function(){}());的区别 Javascript中有2个语法都与function关键字有关,分别是: 函数定义:function FunctionName(FormalParameterList) { FunctionBody } 函数表达式:function [FunctionName](FormalParameterList) { FunctionBody } 从语法的定义上看,这两者几乎是一模一样的(唯一的区别是函数表达式可以省略

python预课03 三元表达式示例,函数定义示例,七段彩码管绘制示例

三元表达式 s = '不下雨' if s == '下雨': print('带伞') if s == '不下雨': print('不带伞') #等效与以下语句 print('带伞' if s == '下雨' else '不带伞') # 三元表达式 函数定义 def login(username,password): #定义login函数 """登陆""" name=input("请输入您的用户名: ").strip() #去除输

JavaScript 函数作用域的“提升”现象

在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的.例如 : message = "hello JavaScript ! " 即定义了一个全局变量message,并赋值 "Hello JavaScript!"--<JavaScript高级程序第三版> 如同往日一般,一群人在所谓的技术交流群里面相互斗图着.突然老王莫名的正经起来,在群里发了一道JavaScript的题目,让大家猜一猜这道题的答案. v

JavaScript 函数定义方法

JavaScript 函数定义方法. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function functionName(parameters) { 执行的代码 } 函数声明后不会立即执行,会在我们需要的时候调用到. function myFunction(a, b) { return a * b; } 分号是用来分隔可执行JavaScript语句. 由于函数声明不是一个可执行语句,所以不以分号结束. 函数表达式 JavaScript 函数可以通过一个表达式定义. 函数表达式可