Function()构造函数与函数直接量
Function()构造函数与函数直接量
制作人:全心全意
在JavaScript中,除了可使用基本的function语句定义函数之外,还可以使用另外两种方式来定义,即使用Function()构造函数和函数直接量定义。这两者之间的区别如下:
- 构造函数Function()允许在运行时动态创建和编译JavaScript代码,而函数直接量却是程序结构的一个静态部分,就像函数语句一样。
- 每次调用构造函数Function()时都会解析函数体,并且创建一个新的函数对象,如果对构造函数的调用出现在一个循环中,或者出现在一个经常被调用的函数中,这种方法的效率将非常低。而函数直接量不论出现在循环体还是嵌套函数中,既不会在每次调用时都被重新编译,也不会在每次遇到时都创建一个新的函数对象。
- Function()创建的函数使用的不是静态作用域,相反地,该函数总是被当作顶级函数来编译。
例:编写自定义的JavaScript函数,在该函数中屏蔽键盘的回车键、退格键、F5键、Ctrl+N组合键、Shift+F10组合键。
注:使用谷歌浏览器测试(Ctrl+N也不可用)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript"> function maskingKeyboard() { if (event.keyCode == 8) { //判断是否为退格键 event.keyCode = 0; event.returnValue = false; alert("当前设置不允许使用退格键"); } if (event.keyCode == 13) { //判断是否为回车键 event.keyCode = 0; event.returnValue = false; alert("当前设置不允许使用回车键"); } if (event.keyCode == 116) { //判断是否为F5键 event.keyCode = 0; event.returnValue = false; alert("当前设置不允许使用F5刷新键"); } if ((event.altKey) && (enent.keyCode == 78)) { //判断是否为Ctrl+N组合键 event.returnValue = false; alert("当前设置不允许使用Ctrl+N新建IE窗口"); } if ((event.shiftKey) && (enent.keyCode == 121)) { //判断是否为Shift+F10组合键 event.returnValue = false; alert("当前设置不允许使用Shift+F10组合键"); } } </script> </head> <body onkeydown="maskingKeyboard()"> <h1>静夜思</h1> </body> </html>