一、函数的声明

1.1 function 命令

function methodName(params) {
// code
}

如下声明:

function test_function(params) {
console.log("function");
}

如上函数, 声明了 test_function函数, 以后使用test_function(params) 都会调用相应的代码, 这就是函数的声明

1.2 函数表达式

除了1.1的函数直接声明,JS还可以用函数赋值给一个变量,即函数表达式。

我们先来看下它的语法是怎么玩的。

var methodName = function() {
// code
};

如下玩法

var test_function = function() {
console.log("function");
};

如上函数是把一个匿名函数赋值给一个变量,  匿名函数就是没有名字了,顾名思义,所以function命令后不要再加函数名。特别要提醒一点 : 使用函数表达式声明的, 函数的声明在结尾的大括号需要加上 分号  表示语句结束。

而函数声明的结尾的大括号后面可以不加 分号。

1.3 Function构造函数

先看下语法

var methodName = new Function(
params...
);

玩法

如果有多个参数,最后一个参数会被当做函数体使用

var test_function = new Function('a','b',
'return (a + b)'
);
console.log(test_function(1,2)); //

上面函数等价于

function add (a, b) {
return a + b;

剖析下第一种写法的参数语义, 除了最后一个参数add 被当做函数体外,其它参数可以看做是函数体add的参数。

Function接受任意类型的参数, 如果只有一个参数,那该参数即被当做函数体使用

var methodName = new Function(
'console.log("function")'
);

二、函数的其它知识点

2.1 闭包

在JavaScript中,闭包是一个难点,在很多高级应用中基本会使用闭包实现。要理解闭包,我们先来看下变量的作用域吧。无非就两种,全局、局部作用

下面的内部函数使用涉及到局部变量访问,变量n作用域f1函数块内,如果想在外部直接访问是不行的,下面在函数f1定义了一个内部函数f2,很巧妙避开了这个问题,由于f2是内部函数,可以直接访问变量n,而内部函数f2又作为f1的返回值.因此,它对外提供了访问f1的局部变量n。闭包就是函数f2,剖析到这里,想必大家都大概能理解闭包的含义了吧。闭包就是"一个函数的内部函数".它的最大特点是能记住所属内部函数的函数环境(f1的局部变量等)本质上,它是连接内部函数和外部函数的桥梁。

function f1() {
var n = 666;
function f2() {
console.log(n);
}
return f2;
} var result = f1();
result(); //

如此一来, n就像是f1的私有变量,外部不能直接访问,那从这个角度思考,闭包类似于java的私有变量,get method提供了对外访问功能。同样,闭包也可以运用在这个场景。

2.2 立即执行定义函数

假设定义了一个函数 iife_function ,然后你想马上调用它。这不是so easy么?直接 iife_function() 。

或许,你想当然想这样调用 function iife_function(){}();  但这种语法是错误的.JavaScript一律将function开头的解释成语句。

而方法的定义是不能以圆括号结束的。

所幸的是,JavaScript支持了下面的调用法。

格式大概是酱紫滴~ 将定义的函数iife_function 放在 圆括号()里面,再在后面加上 ()即可表示调用。

    (function iife_function() {
console.log("iife");
}()); OR (function iife_function2() {
console.log("iife2");
})();

三、参考文献

http://javascript.ruanyifeng.com/grammar/function.html#toc1

[前端JS学习笔记]JavaScript function的更多相关文章

  1. [前端JS学习笔记]JavaScript CallBack

    一.概念介绍 CallBack : "回调" . 在spring优秀框架回调无处不在, 回调的运用场景很多, 如 swt事件监听.netty等.它的主要作用是提高程序执行效率, 一 ...

  2. [前端JS学习笔记]JavaScript prototype 对象

    一.概念介绍 prototype 对象 : 原型对象.在JavaScript中, 每一个对象都继承了另一个对象,后者称为"原型对象". 只有 null 除外,它没有自己的原型对象. ...

  3. [前端JS学习笔记]JavaScript 数组

    一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {&qu ...

  4. [JS学习笔记]Javascript事件阶段:捕获、目标、冒泡

    当你在浏览器上点击一个按钮时,点击的事件不仅仅发生在按钮上,同时点击的还有这个按钮的容器元素,甚至也点击了整个页面. 事件流 事件流描述了从页面接收事件的顺序,但在浏览器发展到第四代时,浏览器开发团队 ...

  5. 生命不息学习不止,前端js学习笔记(一)

    引言 从毕业到年已经整整7年,期间一直从事.net开发做c/s从 c# 转到 wpf 而后又开始做b/s 用silverlight,从最开始的arcgis engine 到后来的silverlight ...

  6. JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)

    JavaScript继承的6种方法 1,原型链继承 2,借用构造函数继承 3,组合继承(原型+借用构造) 4,原型式继承 5,寄生式继承 6,寄生组合式继承 1.原型链继承. <script t ...

  7. js学习笔记----JavaScript中DOM扩展的那些事

    什么都不说,先上总结的图~   Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null ...

  8. spring mvc 及NUI前端框架学习笔记

    spring mvc 及NUI前端框架学习笔记 页面传值 一.同一页面 直接通过$J.getbyName("id").setValue(id); Set值即可 二.跳转页面(bus ...

  9. JS 学习笔记--9---变量-作用域-内存相关

    JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...

随机推荐

  1. DrawDibDraw函数的使用方法

    使用windows的的自带的函数来显示图像可能始终还是绕不开两个概念, 视口和窗口. 视口--- 屏幕上的一个显示用的矩形框. 窗口--- 完整图像上的一个用于取数的矩形框. 屏幕的宽度.高度和视口参 ...

  2. Android UncaughtExceptionHandler,捕获错误

    最近在做个项目,需要在程序出现运行时异常和错误导致程序crash时进行一些操作,找到一个方法 Thread.setDefaultUncaughtExceptionHandler(new Uncaugh ...

  3. MySQL row模式binlog复制原理

    http://www.360doc.com/content/14/1107/14/12904276_423333021.shtml

  4. C# 如何以参数的形式调用.exe程序

    System.Diagnostics.Process.Start("程序的路径", "参数1 参数2");第一个参数是aaa.exe 的路径,第二个参数是用空格 ...

  5. CXF之jaxws:endpoint对spring bean的引用

    由于CXF对spring的无缝支持,CXF的使用,经常与spring捆绑在一起.随之而起的,自然是想在jaxws:endpoint中引用spring bean.在CXF提供的HelloWorld例子中 ...

  6. HDU5764 After a Sleepless Night 树形乱搞题

    分析(官方题解): 假设根已确定,可以发现新树若合法,需满足以下性质:根节点是n:儿子的值不大于父亲:具有相同值的节点形成一条链,并且链不会发生“分叉”(即有多个最低点).所以对于新树中有出现的值x, ...

  7. 【LeetCode 215】Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  8. Windows套接字Socket函数

    1.使用套接字函数之前,先要加载套接字函数库: #include "Winsock2.h" #pragma comment(lib,"Ws2_32.lib") ...

  9. springmvc基础知识

    springmvc框架,类似于struts,主要用于MVC的控制层 spring的简单配置(非注解):  spring-mvc.xml文件(springMVC框架的基本文件) web.xml文件 ja ...

  10. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...