js 自函数
函数基本概念:
函数声明:function box(){}
函数表达式:var box = function(){};
匿名函数:function(){} 属于函数表达式
匿名函数的作用:如果将匿名函数赋值给一个变量,则声明了一个函数: var box= function(){};
如果将匿名函数赋予一个事件则成为事件处理程序: box.addEventListener("click",function(){alert("aaa")});
创建闭包:(function(){})()
函数定义的三种方法:
var box = function(){};
function box(){}
var box = new Function();
函数声明和函数表达式的不同:
js在进行预解析时函数声明会提升,而函数表达式必须js顺序执行到此函数代码时才会逐行解析
函数表达式后面加括号可以立即执行函数,函数声明不可以,只能以fnName()的方式调用才行
实例:
1
2
3
4
|
box(); function box(){ alert( "aaa" ); }<br> //正常,因为js在解析阶段函数声明会被提升到最前面,所以函数声明可以在函数执行后面<br>//实际顺序<br>//function box(){<br> alert("aaa");<br>}<br>//box();<br><br>box();<br>var box = function(){<br> alert("aaa");<br>}<br>//报错,实际上的顺序是<br>//var box = undefined;<br>//box();<br>//box = function(){<br> alert("aaa");<br>}<br>//所以当执行到box()时,此时box不是一个函数<br><br>var box = function(){<br> alert("aaa");<br>}()<br>//正确 函数表达式后面加括号,当执行到后面的括号时js会自动执行此函数<br><br>function box(){<br> alert("aaa");<br>}()<br>//不会报错,但是只会解析函数声明,忽略后面的括号,不会自执行<br><br>function(){<br> alert("aaa")<br>}()<br>//语法错误<br>//虽然匿名函数属于函数表达式,但未进行赋值给一个变量<br>//当js解析到function时,将其看成函数声明,报错,需要一个函数函数名 |
函数自执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
( function (a){ alert(a); })( "123" ) //"123" 使用()运算符 ( function (a){ alert(a); }( "123" )) //"123" 使用()运算符 ! function (a){ alert(a); }( "123" ) //"123" 使用!运算符<br><br>+function(a){<br> alert(a);<br>}("123")<br>//"123" 使用+运算符<br><br>-function (a){<br> alert(a);<br>}("123")<br>//"123" 使用-运算符<br><br>var fn= function(a){<br> alert(a);<br>}("123")<br>//"123" 使用=运算符 |
在function前面加!、+、-、=都可以将函数声明转化为函数表达式,消除了js引擎识别函数声明和函数表达式的歧义,
加()是最安全的方法,免得其他的和函数返回值进行运算
不过这样的写法有什么用呢?
javascript中没用私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉,
根据javascript函数作用域链的特性,可以使用这种技术可以模仿一个私有作用域,用匿名函数作为一个“容器”,
“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,
所以( function(){…} )()内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。
JQuery使用的就是这种方法,将JQuery代码包裹在( function (window,undefined){…jquery代码…} (window)中,在全局作用域中调用JQuery代码时,可以达到保护JQuery内部变量的作用。
js 自函数的更多相关文章
- JS回调函数全解析教程
转自:http://blog.csdn.net/lulei9876/article/details/8494337 自学jQuery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速g ...
- 学习js回调函数
<!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...
- 如何理解JS回调函数
1.回调函数英文解释: A callback is a function that is passed as an argument to another function and is execut ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数
来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...
- js引出函数概念的案例
js引出函数概念的案例 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&q ...
- prototype.js $F()函数介绍
$F()是一个能够简化编码量的函数, 对于字段输入控件有效,包括input.textarea.select等,该函数的输入参数为这些输入控件元素对象的id或元素对象本身,函数负责返回 这些输入控件元素 ...
- JS匿名函数的理解
js匿名函数的代码如下:(function(){ // 这里忽略jQuery 所有实现 })(); 半年前初次接触jQuery 的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的 ...
- js回调函数(callback)理解
Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...
- JS回调函数(callback)
在使用Jquery的时候,用到Callback(),回调函数的概念.而且很多. 比如: $.ajax({ url:"test.json", type: "GET" ...
随机推荐
- C++中虚基类在派生类中的内存布局
今天重温C++的知识,当看到虚基类这点的时候,那时候也没有太过追究,就是知道虚基类是消除了类继承之间的二义性问题而已,可是很是好奇,它是怎么消除的,内存布局是怎么分配的呢?于是就深入研究了一下,具体的 ...
- 使用C语言调用mysql数据库编程实战以及技巧
今天编写使用C语言调用mysql数据库编程实战以及技巧.为其它IT同行作为參考,当然有错误能够留言,共同学习. 一.mysql数据库的C语言经常使用接口API 1.首先当然是链接数据库mysql_re ...
- linux命令行下使用反斜杠“\”调用别名的原命令
经常看到linux软件的作者在介绍安装软件时,在命令前面加一个反斜杠,不解其意,后来查阅资料才知道,这是为了取消别名的调用,使用原命令. alias是shell的内置命令,可以用来设置命令的别名,如使 ...
- asp.net用三层实现多条件检索
众所周知,三层将项目分为界面层,业务逻辑层和数据訪问层(以最主要的三层为例) 相同都知道,多条件检索事实上就是依据用户选择的条件项,然后来拼sql语句 那么.既然要依据用户选择的条件项来拼sql语句, ...
- JMeter学习笔记(六)-负载与监听
1. 场景设计 场景设计的原则:忠于用户实际操作,组合用户的各种操作到场景中来. JMeter场景主要通过线程组设置来完成的,对于复杂场景还需要与逻辑控制器配合完成. 2.场景设置 JMeter线程组 ...
- 关于Java Collections的几个常见问题
列举几个关于Java Collections的常见问题并给出答案. 1. 什么时候用LinkedList,什么时候用ArrayList? ArrayList是使用数组实现的list,本质上就是数组.A ...
- C++ HOJ 猴子分桃
[题目描写叙述] 老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的財富--一大堆桃子.老猴子决定把这些桃子分给小猴子. 第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个.它把剩下的一个留给 ...
- 黑客编程教程(六)Windows的关机和重起
第六节 Windows的关机和重起 很多木马都有远程关机功能,但这并不是一个很好的功能.不过对于入侵服务器,有时需要重起服务器.其实对于关机和重起,只需要调用几个 API函数即可实现. 对于WIN9X ...
- Oracle_字符集问题(数据库与客户端字符集关联关系)
http://blog.163.com/jiankun_liu/blog/static/1863927762013698175289 ********************************* ...
- mysql show full processlist
processlist命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令. 1. 进入mysql/bin目录下输入mysqladmin -u -p -h127. ...