首页 > 技术文章 > 【JS】JavaScript 中的两类函数:预定义函数、自定义函数

bjxqmy 2020-05-22 00:33 原文

函数是一组延迟动作集,可以通过事件触发或在其他脚本中调用。

JavaScript 中,函数可分为:

【parseInt / parseFloat】string 转 int/float

【isNaN / isFinite】检测参数是否为 非数字值/无穷数  

【escape / unescape】对字符串 编码/解码

【eval】执行 JavaScript 脚本

【alert / confirm / prompt】三种警示框

【命名函数】function funcName(){}

【匿名函数】var x=function(){};

【对象函数】var x=Function();

【自调函数】(function(){}());

 

预定义函数

预定义函数是指在 JavaScript 引擎中预先定义的可随时使用的内建函数。如:

1. parseInt("string",radix);

  • 将字符串转换成整数类型,第二参数用于指定输入参数的进制(可选)。
  • 当字符串中存在除了数字、符号、小数点和指数符号以外的字符时,parseInt() 函数就会停止,返回已有结果。
  • 当第一个字符就不能转换时,函数将返回“NaN”(Not a Number)。

如:

parseInt("10");      //返回 10
parseInt("19",10);  //返回 19
parseInt("11",2);   //返回 3
parseInt("17",8);   //返回 15
parseInt("1f",16);  //返回 31
parseInt("010");    //未定:返回 10 或 8

2. parseFloat("string");

将字符串转换成浮点数类型。

3. isNaN(value);

  • 用于检查其参数是否是非数字值。
  • 如果参数值为 NaN 或字符串、对象、undefined 等非数字值则返回  true, 否则返回 false。
  • 可以检测 parseInt() 和 parseFloat() 的调用是否成功。

4. isFinite(number);

  • 用于检查其参数是否是无穷大。
  • 如果 number 是有限数字(或可转换为有限数字),那么返回 true。
  • 如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。

5. escape("string");

对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

但该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。

如:

<script type="text/javascript">
  document.write(escape("Visit W3School!") + "<br />")    /* Visit%20W3School%21 */
  document.write(escape("?!=()#%&"))                      /* %3F%21%3D%28%29%23%25%26 */
</script>

6. unescape("string");

对 escape() 编码的字符串进行解码。

<script type="text/javascript">
  var test1="Visit W3School!"
  test1=escape(test1)
  document.write (test1 + "<br />")     /* Visit%20W3School%21 */

  test1=unescape(test1)
  document.write(test1 + "<br />")      /* Visit W3School! */
</script>

7. eval("string");

  • 当参数 string 是一个表达式时,eval() 函数将执行表达式,并返回计算结果。
  • 当参数 string 是 JavaScript 脚本时,则执行相应的脚本。

如:

var str="3000+500*2";
document.write(eval(str));     /* 显示 4000 */

8. alert("message");

用于显示带有一条指定消息和一个 OK 按钮的警告框。

9. confirm("message");

用于显示一个带有指定消息和 OK 及取消按钮的对话框。

10. prompt("text",defaultText); 

用于显示一个可供用户进行输入的对话框。

"text",可选,对话框中显示的纯文本。

"defaultText",可选,默认的输入文本。

 

 

自定义函数

JavaScript 中除了可以使用预定义函数外,还可以使用自定义函数。

在自定义函数时既不需要声明函数的参数类型,也不需要声明函数的返回类型。

JavaScript 目前支持的自定义方式有:

命名函数

匿名函数

对象函数

自调函数

1. 命名函数

  • 命名函数通过 function 关键词进行定义,其后是函数名和括号 ()。 
  • 完成函数的定义后,函数并不会自动执行,只有通过事件或脚本调用时才会执行。
  • 在同一个 <script></script> 标签中,函数的调用可以在函数定义之前,也可以在函数定义之后。
  • 在不同的 <script></script> 标签中,函数的定义必须在函数的调用之前,否则调用无效。

格式如下:

function funcName([parameters]){
  statements;
  [return 表达式;]
}

2. 匿名函数

  • 匿名函数的定义格式与命名函数基本相同,只是没有提供函数的名称,并且结束位置应有分号;  。由于没有函数名字,所以需要使用变量对匿名函数进行接受,方便后面函数的调用。
  • 命名函数对初学者来说,上手容易,但可读性较差。匿名函数使用相对更加方便,可读性更好,当前比叫流行的 JavaScript 框架基本上都采用匿名函数的方式来定义函数。

格式如下:

var x=function([parameters]){
  statements;
  [return 表达式;]
};

3. 对象函数

JavaScript 提供了 Function 类,用于定义函数。格式如下:

var func1=new Function([parameters],statements;);
  • Function 是用来定义函数的关键字,首字母必须大写。
  • parameters 为函数参数,可选。当有多个参数时,参数之间用逗号, 隔开。
  • statements 为函数执行体。当有多条执行语句时,语句之间以分号; 隔开。

4. 自调用函数

一般情况下,函数本身不会自动执行,只有调用时才会被执行。所以 JavaScript 提供了一种自调用函数,将函数的定义与调用一并实现。格式如下:

(function([parameters]){
  statements;
  [return 表达式;]
})([params]);
  • 需要使用小括号() 将自调函数括起来,并以分号; 结束。
  • parameters 为形参,可选。参数之间以逗号, 隔开。
  • params 为实参,在函数调用时传入数据。

 

代码示例:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>test</title>
</head>
<body>
  <input id="btn1" type="button" onclick="button1Event()" value="button1" />
  <input id="btn2" type="button" onclick="button2Event()" value="button2" /><br />
  <input id="a" type="text"/><input id="b" type="text"/><br />
  <input id="sumBtn" type="button" value="x+y" onclick="sum()"/>
  
  <script type="text/javascript">
    function button1Event(){/* 命名函数 */
        alert("命名函数:按钮1被点击!");
    }
    var x=function(){/* 匿名函数 */
        alert("匿名函数:按钮2被点击!");
    }
    button2Event=x;
    
    var y=new Function("a", "b", "return a+b");/* 对象函数 */
    sum=function(){
        var aValue=parseInt(document.getElementById("a").value,10);
        var bValue=parseInt(document.getElementById("b").value,10);
        alert("对象函数:"+y(aValue,bValue));
    }
    
    var tema=2;var temb=2;
    (function(a,b){/* 自调函数 */
        alert("自调函数:"+(a+b));
    })(tema,temb);
  </script>
</body>
</html>

效果演示:

 

 

 

 

 

推荐阅读