问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js函数定义方式的区别

发布网友 发布时间:2022-04-24 09:05

我来回答

2个回答

热心网友 时间:2022-04-20 18:23

在JS中函数的定义可以分为两种:
1. 函数声明
2. 函数表达式

根据你的代码,下面的代码就是函数的声明(当然另外一段代码是函数表达式):
function a (){
alert(123);
}

根据JS中的语法特性(注意哦,是js的语法特点,要记住):
在javascript函数体内(执行作用域)声明的变量,无论在函数体何处声明,它将都会被提升到函数的顶部,我们称这种现象为变量提升。 函数呢,它也有这种特性,即无论在函数体何处声明另一个函数,它将都会被提升到函数的顶部。只是采用函数表达式和函数声明所体现的函数提升的内容是有差别的:函数表达式和变量提升类似,只会提升函数的变量,不提升函数的定义;而函数声明提升时,不仅仅会提升函数的声明,函数的定义也会被提升

根据以上特性,你的代码在执行时,
function a (){
alert(123);
}
这段代码被提升到执行作用域的顶端,最开始被执行;

然后,在执行
var a =function(){

alert('234');
}
这段代码,导致该代码覆盖了前面的函数声明代码;

不信你可以做个测试:
将a()放到js代码的最顶端,可以看看会打印什么结果,此时你就明白了!

热心网友 时间:2022-04-20 19:41

1:调用关键字function来构造

 function distance(x1,x2,y1,y2) 
  { 
    var dx=x2-x1; 
    var dy=y2-y1; 
    return Math.sqrt(dx*dx+dy*dy); 
  }


2:使用Function()构造函数(请注意与上面的大小写)

var f=new Function*"x","y","return x*y");

这行代码创建了一个新函数,该函数和你所熟悉的语法定义的函数基本上时等价的:

function f(x,y) 
  { 
      return x*y; 
  }

Functino()构造函数可以接受任意多个字符串参数。它的最后一个参数时函数的主体,其中可以包含任何JavaScript语句,语句之间用分号分隔。其他的参数都是用来说明函数要定义的形式参数名的字符串。如果你定义的函数没有参数,那么可以只需给构造函数传递一个字符串(即函数的主体)即可。 
  注意,传递给构造函数Function()的参数中没有一个用于说明它要创建的函数名。用Function()构造函数创建的未命名函数有时被成为“匿名函数”。 
  你可能非常想知道Function()构造函数的用途是什么。为什么不能只用function语句来定义所有的函数呢?原因是Function()构造函数允许我们动态地建立和编译一个函数,它不会将我们*在function语句预编译的函数体中。这样做带来的负面影响效应就是每次调用一个函数时,Function()构造函数都要对它进行编译。因此,在循环体中或者在经常使用的函数中,我们不应该频繁地调用这个构造函数。 
  使用Function()构造函数的另一个原因是它能够将函数定义为JavaScript表达式的一部分,而不是将其定义一个语句,这种情况下使用它就显得比较的方面,甚至可以说精致。


 3:函数直接量 
  函数直接量是一个表达式,它可以定义匿名函数。函数直接量的语法和function语句非常相似,只不过它被用作表达式,而不是用作语句,而且也无需指定函数名。下面的三行代码分别使用function()语句、Funciont()构造函数和函数直接量定义了三个基本上相同的函数:

 function f(x){return x*x}; 
  var f=new Function("x","return x*x;"); 
  var f=function(x){reurn x*x};


在JavaScript1.1中,可以使用构造函数Function()来定义函数,在JavaScript1.2和其后的版本中,还可以使用函数直接量来构造函数。你应该注意这两种方法之间的重要差别。 
   
  首先,构造函数Function()允许在运行时动态地创建和编译JavaScript代码。但是函数直接量却是函数结构的一个静态部分,就像function语句一样。 
  其次,作为第一个差别的必然结果,每次调用构造函数Function()时都会解析函数体并且创建一个新东汉数对象。如果对构造函数的调用出现在一个循环中,或者出现在一个经常被调用的函数中,这种方法的效率非常低。另一个方面,函数直接量或出现在循环和函数中的嵌套函数不是在每次调用时都被重新编译,而且每当遇到一个函数直接量时也不创建一个新的函数对象。 
  Function()构造函数和函数之间量之间的第三点差别是,使用构造函数Function()创建的函数不使用词法作用域,相反的,它们总是被当作顶级函数来编译,就像下面代码所说明的那样:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
晚上在手机上看视频为什么开通了夜间流量 却扣去了国内手机上网流量 49套餐赠送的200m流量是不是每个月都有 中国移动真是黑透了心,我开通了夜间流量,23.00-7.00,现在是6.41,突然给... 您的200M省内夜间流量促销套餐本月内含200.00MB的省内闲时移动数据流 ... 的漫展一般都什么时候,在什么地方办 运城盐湖女子看守所打人吗? 山西监狱大小排名 山西重刑犯监狱在哪里 什么项目不用增值税 哪些行业可以免征增值税? javascript 中函数 function什么作用 JS里声明函数有几种方式? JS函数是什么? 推荐几篇好的歌特文章 js函数有哪些特点 梦见龙和九子 虎跑泉何以得名? 庞培《蔷薇》现代诗鉴赏 龙有哪9似? 关于夏天的现代诗歌 给我介绍些歌曲,它的歌词很美, 我从小到大都做一个梦。我在房子里,门是关着的。然后外面突然起风了_百度... 我是村委会成员,梦见村委会门关闭门环用绳子捆绑着用竹子拉着 梦见门环不完整反扣不住最后拿石头挡往在家门缝看到几位美女头戴花代跑过去听说是死人下葬我叫他们不要站 梦见门环不完整反扣不住最后拿石头挡往门是半开着看见几位漂亮姑娘带着花带我想看可是跑到门口听说是死人 有什么快速塑形的方法吗? 如何快速健身塑形 如何让普通塑料变的很硬 怎样塑腰? 女生如何塑型 js函数的几种写法 闭包概要 JS函数的参数如何设置 js中函数到底怎么存储的? 怎么js理解函数实例 js 函数如何去调用另一个函数中的函数? 关于js函数声明和调用函数的问题 JS 函数问题? JS执行函数 js中函数具体指什么 javascript函数传参问题 如何分辨aj5真假 关于js函数的写法 fun = function(){} fun:{}有什么不同,高手回答_百 ... aj5怎么辨别真假 aj5怎样辨真伪 AJ5怎么看真假 怎么辨别aj5真假 怎样区分aj5真假 新人求助如何看AJ鞋真假尤其AJ5 如何鉴别aj5的真假?还有就是如果鞋子的鞋底和鞋跟有一些小瑕疵是不是正常的? 真假AJ5鸳鸯怎么区别