js中函数的三种定义方式

js系列教程4-函数、函数参数

在js中,函数本身属于对象的一种,因此可以定义、赋值,作为对象的属性或者成为其他函数的参数。函数名只是函数这个对象类的引用。

一、函数定义

【1】函数声明语句
使用function关键字,后跟一组参数以及函数体

function funcname([arg1 [,arg2 [...,argn]]]){    statement;}

登录后复制

【2】函数定义表达式

以表达式方式定义的函数,函数的名称是可选的

var functionName = function([arg1 [,arg2 [...,argn]]]){    statement;}var functionName = function funcName([arg1 [,arg2 [...,argn]]]){    statement;}

登录后复制

匿名函数(anonymous function)也叫拉姆达函数,是function关键字后面没有标识符的函数

通常而言,以表达式方式定义函数时都不需要名称,这会让定义它们的代码更加紧凑。函数定义表达式特别适合用来定义那些只会使用一次的函数

var tensquared = (function(x) {return x*x;}(10));   //

登录后复制

 而一个函数定义表达式包含名称,函数的局部作用域将会包含一个绑定到函数对象的名称。实际上,函数的名称将成为函数内部的一个局部变量

var test = function fn(){   return fn;}console.log(test);//fn(){return fn;}console.log(test());//fn(){return fn;}console.log(test()());//fn(){return fn;}

登录后复制

个人理解,对于具名的函数表达式来说,函数名称相当于函数对象的形参,只能在函数内部使用;而变量名称相当于函数对象的实参,在函数内部和函数外部都可以使用

var test = function fn(){   return fn === test;}console.log(test());//trueconsole.log(test === fn);//ReferenceError: fn is not defined

登录后复制

函数定义了一个非标准的name属性,通过这个属性可以访问到给定函数指定的名字,这个属性的值永远等于跟在function关键字后面的标识符,匿名函数的name属性为空

//IE11-浏览器无效,均输出undefined//chrome在处理匿名函数的name属性时有问题,会显示函数表达式的名字function fn(){};console.log(fn.name);//'fn'var fn = function(){};console.log(fn.name);//'',在chrome浏览器中会显示'fn'var fn = function abc(){};console.log(fn.name);//'abc'

登录后复制

【3】Function构造函数

Function构造函数接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面的参数则枚举出了新函数的参数

var functionName = new Function(['arg1' [,'arg2' [...,'argn']]],'statement;');

登录后复制

[注意]Function构造函数无法指定函数名称,它创建的是一个匿名函数

从技术上讲,这是一个函数表达式。但,不推荐使用,因为这种语法会导致解析两次代码。第一次是解析常规javascript代码,第二次解析传入构造函数中的字符串,影响性能

var sum = new Function('num1','num2','return num1 + num2');//等价于var sum = function(num1,num2){    return num1+num2;}

登录后复制

Function()构造函数创建的函数,其函数体的编译总是会在全局作用域中执行。于是,Function()构造函数类似于在全局作用域中执行的eval()

var test = 0;function fn(){    var test = 1;    return new Function('return test');}console.log(fn()());//0

登录后复制

[注意]并不是所有的函数都可以成为构造函数

var o = new Math.min();//Uncaught TypeError: Math.min is not a constructor

登录后复制

二、函数声明顺序

函数声明,相对于变量会优先加载。所以不用担心函数声明在调用前还是调用后。

调用函数时会先在本机活动对象中查询,即当前js文件中查询,如果没有才会向上查询,所以若在两个js文件中定义相同函数名,这两个js文件内部调用各自的函数,其他js文件中调用最后声明的函数。

三、重复

变量的重复声明是无用的,不会覆盖之前同一作用域声明的变量,但函数的重复声明会覆盖前面的声明的同名函数或同名变量。

//变量的重复声明无用var a = 1;var a;console.log(a);//1

登录后复制

//覆盖同名变量var a;function a(){    console.log(1);}a();//1

登录后复制

//覆盖同名函数a();//2function a(){    console.log(1);}function a(){    console.log(2);}

登录后复制

四、删除

函数声明语句创建的变量无法删除,这一点和变量声明一样。

function foo(){    console.log(1);}delete foo;//falseconsole.log(foo());//1

登录后复制

   本文介绍了js中函数的三种定义方式,更多相关内容请关注【创想鸟】。

相关推荐:

JS 中的‘’真假‘’

JS 中的‘’真假‘’

JS 中的‘’真假‘’

以上就是js中函数的三种定义方式的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3184165.html

(0)
上一篇 2025年3月31日 21:36:05
下一篇 2025年3月31日 21:36:13

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在JS中如何实现图片居中悬浮效果

    这篇文章给大家分享的是通过js实现图片垂直居中悬浮,不跟随滚动条飘动的效果,有兴趣的朋友跟着学习下吧。 这篇文章我们是用JS实现一个图片悬浮的效果,在我们用鼠标下拉滚动的时候图片居中悬浮,不跟随滚动,我们先来看下效果图: 下面我们来看下所有…

    2025年3月31日
    100
  • JS控制文本框禁止输入特殊字符

    JS 控制不能输入特殊字符 this.value=this.value.replace(/[^u4e00-u9fa5w]/g,”) 登录后复制  JS 控制文本框只能输入数字 登录后复制登录后复制登录后复制登录后复制登录后复制登录后复制登…

    编程技术 2025年3月31日
    100
  • js实现移动HTML5页面滑动到最底部触发内容加载

    以上就是js实现移动HTML5页面滑动到最底部触发内容加载的详细内容,更多请关注【创想鸟】其它相关文章!

    编程技术 2025年3月31日
    100
  • JS回调函数实例

    初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数。   我们先来看看回调的英文定义:A callback is a function that is passed as an argument to another f…

    编程技术 2025年3月31日
    100
  • JS实现浏览器打印、打印预览

    目前正在做浏览器端采用JS方式实现打印这么一个功能,JS打印实现的方法很多,但是兼容各个浏览器实现打印预览的功能有些棘手,现将实现的内容及遇到的问题记录下来,希望有大牛看到所提的问题后可以给予解答,在此感谢啦。 1.JS实现打印的方式 方式…

    2025年3月31日
    100
  • js函数常见的写法以及调用方法

    写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风格的js函数的写法。不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考。1.常规写法(最常见的那种) //函数的写法fun…

    编程技术 2025年3月31日
    100
  • JavaScript中 with的用法

      说起js中的with关键字,很多小伙伴们的第一印象可能就是with关键字的作用在于改变作用域,然后最关键的一点是不推荐使用with关键字。听到不推荐with关键字后,我们很多人都会忽略掉with关键字,认为不要去管它用它就可以了。但是有…

    2025年3月31日
    100
  • js 基础 数据类型及转换 进制 操作符

    nbsp;html>        js 基础         你好     //内嵌式 // 输出语句 alert(“我是内嵌式”); prompt(“请输入:”); confirm(“你好吗?”); console.log(“我是…

    编程技术 2025年3月31日
    100
  • 在JS中如何生成随机打乱数组

    这篇文章主要介绍了js生成随机打乱数组的方法,涉及javascript数组随机排序的相关操作技巧,需要的朋友可以参考下 本文实例讲述了JS生成随机打乱数组的方法。分享给大家供大家参考,具体如下: 一、比较乱的排序方法 function fn…

    2025年3月31日
    100
  • 使用JS如何实现控制多个滚动条同步滚动

    本文要探讨的是,当这两个容器元素的内容都超出了容器高度,即都出现了滚动框的时候,如何在其中一个容器元素滚动时,让另外一个元素也随之滚动 在一些支持用 markdown 写文章的网站,后台写作页面,一般都是支持 markdown 即时预览的,…

    2025年3月31日 编程技术
    100

发表回复

登录后才能评论