码迷,mamicode.com
首页 > 编程语言 > 详细

【JS笔记系列】浅谈JavaScript函数

时间:2015-02-18 12:59:39      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

JavaScript作为一种基于对象(非严格面向对象)的语言,函数在JS中的地位非同一般:用函数声明类和对象。甚至函数本身也是对象。

一、函数的三种声明方式辨析。

1.function命令

function printAbc(){

console.log(‘ABC‘);

}

 

2.函数表达式(变量赋值形式)

var printAbc = function (){

console.log(‘ABC‘);

};

注意:1、使用函数表达式形式时务必要有分号。

2、此时function后函数名可有可无,且只在函数内部有效

var fname = function abc(){

console.log(abc.name);  /* xxx.name 方法非ECMAScript标准 */

}

fname();   //abc

abc(); //ReferenceError: abc is not defined

这种写法的用处有两个,一是可以在函数体内部调用自身,二是方便除错(除错工具显示函数调用栈时,将显示函数名,而不再显示这里是一个匿名函数)。

 

3.使用Function构造函数

JS中一切都是对象,声明函数也可以看作构造函数对象。

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

f(1,2);   //3

第1到第N-1个参数是函数参数,第N个参数是函数体。

有些人认为,这种定义方式只有傻逼才会用,因为除了奇葩以外别无好处,但是其实真的是有用的- -。

实现一个在线运行和编辑JS代码的程序:

<html>
<head>
<title>JS Run Online</title>
<script type="text/javascript">
function btnOnclick(){
var getDiv = document.getElementById("TextArea");
var text = getDiv.value;
var f = new Function(text);
f();
}
</script>
</head>
<body>
<div align="center">
<textarea id="TextArea" cols="30" rows="10"></textarea>

<input type="button" value="Run" onclick="btnOnclick()">
</div>
</body>
</html>

 

这段程序功能看起来简单,但是如果用静态语言将是很难实现的,Function构造函数正是JavaScript是动态语言的有力证明——可以在运行过程中让程序修改程序本身,而动态语言的核心就是:所有参数,包括函数体,都视作字符串。(个人理解,不妥望指正)。

 

 

二、重复声明问题。

 //未完待续

【JS笔记系列】浅谈JavaScript函数

标签:

原文地址:http://www.cnblogs.com/taoshen/p/4295706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!