一、function概述

javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。

函数对象与其他用户所定义的对象有着本质的区别,这一类对象被称之为内部对象。内置对象的构造器是由JavaScript本身所定义的。

二、function对象的创建

在JavaScript中,函数对象对应的类型是Function,可以通过new Function()来创建一个函数对象,也可以通过function关键字来创建一个对象。

//使用new Function()方式创建

var myFunction=new Function("a","b","return a+b");

//使用function关键字创建

function myFunction(a,b) {

return a + b;

}

用关键字创建对象的时候,在解释器内部,就会自动构造一个Function对象,将函数作为一个内部的对象来存储和运行。从这里也可以看到,一个函数对象 名称(函数变量)和一个普通变量名称具有同样的规范,都可以通过变量名来引用这个变量,但是函数变量名后面可以跟上括号和参数列表来进行函数调用。

new Function()的语法规范如下:

var funcName=new Function(p1,p2,...,pn,body);

  参数的类型都是字符串,p1到pn表示所创建函数的参数名称列表,body表示所创建函数的函数体语句,funcName就是所创建函数的名称。可以不指定任何参数创建一个空函数,不指定funcName创建一个匿名函数。

  需要注意的是,p1到pn是参数名称的列表,即p1不仅能代表一个参数,它也可以是一个逗号隔开的参数列表,例如下面的定义是等价的:

  new Function("a", "b", "c", "return a+b+c")

  new Function("a, b, c", "return a+b+c")

  new Function("a,b", "c", "return a+b+c")

函数的本质是一个内部对象,由JavaScript解释器决定其运行方式。并且可直接在函数声明后面加上括号就表示创建完成后立即进行函数调用,例如:

var i=function (a,b){

   return a+b;

  }(1,2);

  alert(i);

这段代码会显示变量i的值等于3。i是表示返回的值,而不是创建的函数,因为括号“(”比等号“=”有更高的优先级。

三、匿名函数和有名函数的区别

匿名函数必须先定义后调用,有名函数可以先调用,后定义。

A)匿名(这段语句将产生func未定义的错误)

<script>

func();

var func = function() {

alert(1);

}

< /script>

B)有名(输出1)

<script>

func();

function func() {

alert(1);

}

< /script>

这是因为JS解释器是分段分析执行的。并且,在同一段中,有名函数会优先被分析。并且同名函数后面的覆盖前面的。

而且,下面这段代码也是合法的:

<script>

function myfunc ()
{
alert("hello");
};
myfunc(); //这里调用myfunc,输出yeah而不是hello

function myfunc ()
{
alert("yeah");
};
myfunc(); //这里调用myfunc,输出yeah

</script>

如果要让上述代码的第一次调用输出“hello”,可以将它们分为两段:

<script>

function myfunc ()
{
alert("hello");
};
myfunc(); //这里调用myfunc,输出hello
< /script>

<script>
function myfunc ()
{
alert("yeah");
};
myfunc(); //这里调用myfunc,输出yeah

</script>

下面的代码输出“hello”

<script>

function myfunc ()
{
alert("hello");
};
< /script>

<script>

myfunc(); //输出“hello”

</script>

<script>
function myfunc ()
{
alert("yeah");
};

</script>

下面的代码输出“yeah”

<script>

function myfunc ()
{
alert("hello");
};
< /script>

<script>
function myfunc ()
{
alert("yeah");
};

</script>

<script>

myfunc(); //输出“yeah”

</script>

从上面对段的位置变化导致输出变化很清楚的解释了JS解释器分段分析执行的本质。

js function相关推荐

  1. js function定义函数的4种方法

    js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码代码如下: function func(){}  或  var func=funct ...

  2. js function后面小括号

    js function后面小括号 function后面小括号有小括号为立即调用函数 立即调用函数 function后面小括号有小括号为立即调用函数 立即调用函数 IIFE (Immediately I ...

  3. js php mysql 是b,MySQL_BBS(php mysql)完整版(七),//下面是 top.js function KB_kee - phpStudy...

    BBS(php & mysql)完整版(七) //下面是 top.js function KB_keepItInIE(theName,theWantTop,theWantLeft) { the ...

  4. 网易云课堂Nodejs笔记(js Function,css,写法)

    网易云课堂Nodejs笔记(js Function,css) CSS position ---网页定位 margin ---元素外边距 padding ---元素内边距 nth-child()选择器 ...

  5. js Function对象扩展与延时执行函数实例代码

    网页特效 function对象扩展与延时执行函数实例代码 function.prototype.delay=function(this1,timeout){ this1=this1||null; ti ...

  6. js function如何传入参数未字符串_Python爬虫 JS 案例讲解:爬取漫画

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python爬虫案例,作者麦自香 转载地址 https://blo ...

  7. JS function立即调用的几种写法

    //立即执行 (function () { alert(1) })() //立即执行 !function () { alert(1) }() //立即执行 +function () { alert(1 ...

  8. js function如何传入参数未字符串_JavaScript 学习之路- JS 小测验

    在学习 JS 的过程中,很多知识往往看一遍就过去了,然后自以为掌握了,其实再次碰到不一定能答得出来,看到一些有趣的东西还是要动手实践一下,而且时不时复习一下,非常有利于加深记忆.今天是五一,假日期间, ...

  9. js function随笔

    function test () {c=5;alert(c); } test(); 当我们在执行test函数时,浏览器并不会报c未定义的错误,因为在js中,变量定义是通过var关键字,如果没有通过va ...

  10. 为什么我的js function中的代码不起作用了?

    为什么我的js代码不起作用了?function { ... }中的代码无效,直接onClick=" ... "又管用了,难道window.alert("")也会 ...

最新文章

  1. Tomcat 服务器的端口号的修改
  2. 需要额外端口信息_NR逻辑天线端口介绍
  3. (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
  4. 上周热点回顾(6.5-6.11)
  5. java反射数组_java反射Array的使用
  6. 数据同步框架MS Sync Framework-不同场景使用例子和简要分析
  7. ios中navigationItem的titleView如何居中
  8. 只要实现了annotation这个接口就是注解 同理:只要实现了某个接口就是该类型的实现类...
  9. MVC3中Ajax.ActionLink用法
  10. 树莓派python开发教程_树莓派Raspberry开发从基础到进阶视频+设计资料超详细教程下载...
  11. Android中Handler的正确使用
  12. TCP长连接开发相关,调试工具SocketTool与框架GatewayWorker
  13. 天天生鲜项目 python邮箱_Django之天天生鲜项目
  14. 判断和循环——实战收尾篇1(二分法、抛硬币等)
  15. Python 60 天 + 450 题,倾情奉献
  16. vue-cli3.0移动端使用的轮播插件
  17. excel成本统计:如何进行区域筛选,多条件求和?
  18. Wideband Direction of Arrival Estimation Based on Multiple Virtual Extension Arrays
  19. 使用shell脚本监控程序的运行和停止
  20. 关于MySQL表添加某一列和删除某一列

热门文章

  1. 【标题】win只能打开部分软件例如QQ,UU加速器,浏览器无法打开
  2. 视频教程-思科CCNP专题系列③:OSPF路由协议-思科认证
  3. Android的消息机制 Handler、MessageQueue、ThreadLocal、Looper
  4. 数字签名原理及其应用详解
  5. 金蝶K3工业单据中间层插件开发教程
  6. 简体中文和繁体中文的转换
  7. 关于计算机四级网络工程师的考试
  8. nx零件库插件_支持Fusion 360软件的3DSource零件库插件发布
  9. 苹果ipad怎么刷机_白苹果如何修复,为什么会出现白苹果
  10. java:xml数据转json