函数本质就是功能的集合

JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能)

var fn=function(a){return a+100;}
fn=function(a){return a+200;}
alert(fn(100)); //300

要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果

函数体内部的语句在执行时,一旦遇到return,函数就会结束(后面的代码不会执行),并返回返回值

返回值可以是任何类型的值,如果没有return或只有return而没有返回值,则函数返回默认值undefined

在函数内部,有两个特殊的对象arguments和this

  a.arguments是一个类似数组(但不是数组)的对象,用于保存函数的参数,即使函数定义时没有定义参数,arguments也会保存实际调用时使用的参数

  b.this表示当前函数执行的环境对象的引用

function fn(){return this;}
fn();

函数拥有两个属性length和prototype

  a.length表示希望接收的参数个数,而不是实际接收的

  b.prototype保存了引用类型的所有实例方法(tostring(),valueOf()等等),在ES5中,prototype属性是无法枚举的

函数拥有两个非继承而来的方法apply()和call(),这两个方法的作用都是在特定的作用域中调用函数实际上等于设置函数体内this对象的值

  a.apply()方法可以接收两个参数,一个是在其中运行函数的作用域,另一个是参数数组(可以没有),参数数组可以是Array的实例,也可以是arguments对象

  b.call()方法和apply()方法作用相同,但接收参数的方式不同,call()第二个参数只能是函数参数的数组形式,也就是说第二个参数必须一个一个列出来

这两个方法常用来扩充作用域

  c.fn()==fn.call()==fn.apply()

function fn1(a,b){return a+b;}
function fn2(a,b){return fn1.apply(this,arguments);}
alert(fn1(1,1)); //2
alert(fn2(1,1)); //2
function fn1(a,b){return a+b;}
function fn2(a,b){return fn1.apply(this,[a,b]);}
alert(fn1(1,1)); //2
alert(fn2(1,1)); //2
fn.call(window);       //fn在全局环境中执行
fn.call(this); //fn在当前环境中执行

ES5中还定义了一个方法bind(),这个方法会创造一个函数的实例,其this值会被绑定到传给bind()方法的值

window.color='red';
var p={color:'blue'};
function fn(){alert(this.color);}
var fn0=fn.bind(p);
fn0(); //blue

  

  

对JS中函数的理解的更多相关文章

  1. js中函数的理解

     在JavaScript中,函数是一个极容易引起误解或引发歧义的数据类型,它可以是独立的函数类型,又可以作为对象的方法,也可以被称为类或构造器,还可以作为函数对象而存在等. 

  2. JS中函数参数和函数返回值的理解

    函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...

  3. js回调函数的理解

    js回调函数(callback)理解 Mark! 讲之前说一句 function say(){ alert(,,,,,,,,) } var say=function (){ alert(,,,,,,, ...

  4. 关于js中函数的调用问题

    js中函数的调用方法 1.直接调用 函数名(参数): 2.通过指向函数的变量去调用 例如: var myval = 函数名: 此刻 myval是指向函数的一个指针: myval(实际参数):此刻调用的 ...

  5. js中函数传参的情况

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. JS中函数void()

    <a href="javascript:void(0)">hello</a>/* * JS中函数void()的运用大体是这种新式; * void()是运算符 ...

  7. js中函数的参数为函数的情况即回调函数

    js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数function B() { console.log("函数B")setTimeout( ...

  8. JS中函数的调用和this的值

    调用每一个函数会暂停当前函数的执行,传递控制权和参数给新函数.除了声明时定义的形式参数,每个函数还接收两个附加的参数:this 和 arguments. 参数this在面向对象编程中非常重要,他的值取 ...

  9. 关于js中闭包的理解

    1.以前很不理解js中闭包的概念及使用,下面来看一下 function foo() { var a = 123; var b = 456; return function () { return a; ...

随机推荐

  1. 怎么使用ping命令进行连通性测试

    关于ping命令的作用: ping 命令有助于验证网络层的连通性!一般进行网络故障排除时,可以使用ping 命令向目标计算机或IP地址发送ICMP回显请求,目标计算机会返回回显应答,如果目标计算机不能 ...

  2. mysql命令之二:查看mysql版本的四种方法

    1:在终端下:mysql -V. 以下是代码片段: [shengting@login ~]$ mysql -V mysql Ver 14.7 Distrib 4.1.10a, for redhat-l ...

  3. [Java][Web]Request 获取请求头和数据

    获取方式一 InputStream in = request.getInputStream(); int len = 0; byte buffer[] = new byte[1024]; while( ...

  4. 使用Ajax解析数据遇到的问题

    数据格式 我最近在使用JQuery的$.ajax访问后台的时候,发现竟然无法解析返回的数据,具体的错误记不清了(以后在遇到问题先截个图),可以在浏览器的Console中看到一个错误,但是去看这条请求是 ...

  5. ThinkPHP实例—实现登录验证

    ThinkPHP 验证 本篇我们将运用商城实例讲解一下如何运用ThinkPHP做一个登录验证 我们的框架目录结构如下图所示: 其中 app  文件夹就是我们的应用文件夹  它的目录结构如下所示 其中 ...

  6. solr解决访问安全

    Tomcat7,solr3.6,mmseg1.8 1:环境的搭建 1:解压tomcat,solr,mmseg4j 2:复制dist文件夹下apache-solr.war到tomcat的webapp文件 ...

  7. 对Node的优点和缺点提出了自己的看法?

    (优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求, 因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多. 此外,与Node代理服务器交互的客户端代 ...

  8. Windows 10 提权漏洞复现及武器化利用

    项目地址:https://github.com/SandboxEscaper/randomrepo 相关工具的下载地址: Process Explorer:https://docs.microsoft ...

  9. 14_java之变量|参数|返回值|修饰符

    01java中的文档注释和制作 * A: 在eclipse使用时,可以配合文档注释,导出对类的说明文档,从而供其 他人阅读学习与使用. 通过使用文档注释,将类或者方法进行注释用@简单标注基本信息.如@ ...

  10. leetcode334

    public class Solution { public bool IncreasingTriplet(int[] nums) { var len = nums.Length; ) { retur ...