ECMAScript 的函数实际上是功能完整的对象。

函数的理解

用 Function 类直接创建函数,格式如下。可理解为Function构造器。

var function_name = new Function(arg1, arg2, ..., argN, function_body)

通过Function类定义一个函数

var sayHi = new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");

出于效率原因我们一般不这么写。而采用下面的写法

function sayHi(sName, sMessage) {
alert("Hello " + sName + sMessage);
}

但我们只要知道所有函数都应看作 Function 类的实例函数名只是指向函数对象的引用值,行为就像其他对象一样。

怎么理解行为?函数默认有length属性,跟其他对象一样默认也有valueOf() 方法及 toString() 方法。

函数的定义

定义函数有多种方式,大致分两类,声明式和表达式

1. 最普通的,以function开头

function foo(a, b){
return a+b;
}

2. 将函数表达式赋值给一个变量

var foo = function (a, b){
return a+b;
}

立即执行表达式

(function(){
// do sth
})()

将函数对象作为表达式返回

return function(){
// do sth
}

命名的函数表达式

var add = function foo(a, b){
// do sth
};

函数声明和函数表达式的差异

如下图:使用函数声明可正确的输出结果3,但是用函数表达式定义的函数结果是undefined。

原因是,当JS执行之前。解析器会读取函数声明添加到执行环境中。对代码求值时,JS引擎在第一遍会声明函数并将它们放到源代码树的顶部。就好像先执行了function add(), 然后才执行了 var number = add()。函数被提前了。

同样的函数表达式也会被提前,也就是var add被提前,但是值是undefined。这里将undefined像函数那样去调用就报了“undefined is not a function”。

JS学习 函数的理解的更多相关文章

  1. js回调函数的理解

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

  2. js回调函数(callback)理解

    Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...

  3. JS匿名函数的理解

    js匿名函数的代码如下:(function(){ // 这里忽略jQuery 所有实现 })(); 半年前初次接触jQuery 的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的 ...

  4. 对JS中函数的理解

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

  5. JS回调函数(理解篇)

    概述: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而 ...

  6. 妙谈js回调函数的理解!

    很有共鸣,之前也是一直对回调函数感觉不明不白的,自己也看了不少解释说明.后来我觉得造成很多人对回调理解困难的一个原因就是,我在开发中见到的大多数使用了回调函数的情况都是直接上来就 传一个回调函数进去 ...

  7. js学习——函数

    函数声明 function funName(parameter){} 函数表达式,并把函数存储在变量x中 //不用给函数名,后续并不能直接用给定的函数名调用 var x = function(a){r ...

  8. JS random函数深入理解(转载)

    转载自:(本文对读者有帮助的话请移步支持原作者) http://www.cnblogs.com/starof/p/4988516.html 一.预备知识 Math.ceil();  //向上取整. M ...

  9. js中函数的理解

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

随机推荐

  1. 阿里巴巴连接池Druid简单使用

    Druid参考:https://github.com/alibaba/druid 偶尔的机会解释Druid连接池,后起之秀,但是评价不错,另外由于是阿里淘宝使用过的所以还是蛮看好的. Druid集连接 ...

  2. 在Windows 7和10上显示上次登录帐户信息

    组策略: 计算机配置->管理模板->Windows组件->Windows登录选项 现在注销并重新登录以查看会发生什么. 在进入桌面之前,用户必须确认该消息 注册表: 打开: &quo ...

  3. 我的第一个C++程序

    准备抽空学习C++了,不知道自己以后能不能坚持下去,去百度查了一下入门,大多数朋友都是选择用VC++或者VS,而我这里用的是C-Free 5 ,安装包也只有十几兆. 用起来也方便.对于初学者而言够用了 ...

  4. js 实现 文字打印效果

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

  5. init/loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法

    init/loadView/viewDidLoad/viewDidUnload 这么细节的东西想来大家都不在意,平时也不会去关系,但是在面试时却常常被提到,所以了解viewController的生命周 ...

  6. java 编写小工具 尝试 学习(六)

    1.java 布局管理器-布局管理器之null布局(空布局) 的 学习,参考大神教程:http://www.cnblogs.com/liaoliao/p/5009445.html import jav ...

  7. Linux -- 用户组篇

    Linux -- 用户与用户组 1.Linux 系统中有三种角色:所有者(用户),用户组与其他人,一张图可以说明用户与用户组的关系. 如图,某公司相当于一个用户组,该用户组下有A,B两个用户,用户拥有 ...

  8. 【HDOJ 5726】GCD(RMQ+二分)

    Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). ...

  9. chromium之lazy_instance

    先看看介绍 // The LazyInstance<Type, Traits> class manages a single instance of Type, // which will ...

  10. html 让table表格中的td单元格内容过长显示为固定长度,多余部分用省略号代替?

    <th class="wrap">商品名</th> .wrap{ width: 150px; //设置需要固定的宽度 white-space: nowrap ...