JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用
2017-11-28 11:35
337 查看
转载自:https://www.cnblogs.com/platycoden/p/5198852.html
JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用:
.全局变量与局部变量
在函数内定义的就是局部的,否则就是全局的。局部变量只在局部作用域起作用。如果函数内的变量没有var声明,会直接影响全局的。
机制:在JS中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没找到,继续向上查找,一直查找到全局作用域为止。如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是JS中的作用域链。
局部访问全局通过作用域链,全局访问局部要通过闭包。
“JavaScript设计得最出色的就是它的函数的实现。” -- 《JavaScript语言精粹》
函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为。一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能。
1.函数的功能
代码重复性使用
模块化编程
2.语法:
使用函数前要先定义才能使用
函数定义有三个部分:函数名,参数列表,函数体
格式:
例如:
在上面这个例子当中,first,second是形参,i,j是实参。
在函数执行过程中,形参值得改变不会影响实参。(按值传递)
但是对象数据类型,是按引用传递(按地址传递),其他数据类型都是按值传递。
比如,下面的例子,运行的结果是“aaa”
3.关于函数的返回值问题
函数遇到return会立即返回,后面代码不执行。
4.关于匿名函数
在JS当中每一个变量,包括函数都算是一个对象,都占据了内存地址。函数也是一种对象,占据了内存地址。内存包括,堆内存,栈内存,静态区和代码段。一般来说,变量名保存到栈内存中,变量对象的数据保存带堆内存当中。因为堆比栈大,但栈比堆快。函数会保存到内存当中的代码段中。代码段中的数据的引用是通过栈内存中的一个名字指向的。
在上面这个例子中,function display(){} 其实是,在window对象下添加一个叫display的变量,它指向了这个函数的首地址。其中i=dispaly的意思就是,我们让window对象下的i指向这个函数的首地址。
匿名函数的用法
5.自调用匿名函数
格式: (function(){})();
function(){} : 相当于返回首地址
(function(){}) : 把这部分看作是一个整体
(function(){})() : 相当于找到这个地址并执行
自调用匿名函数的好处是,避免重名,自调用匿名函数只会在运行时执行一次,一般用于初始化。
6.全局变量与局部变量
在函数内定义的就是局部的,否则就是全局的。局部变量只在局部作用域起作用。如果函数内的变量没有var声明,会直接影响全局的。
机制:在JS中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没找到,继续向上查找,一直查找到全局作用域为止。如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是JS中的作用域链。
局部访问全局通过作用域链,全局访问局部要通过闭包。
7.arguments的使用
在一个函数内部,可以使用arguments属性,它表示函数的形参列表,是以数组形式体现的。
在定义一个函数的时候,它的实参个数必须要与形参个数保持一致,有时,我们定义函数时,形参数目不能固定,这个时候就要使用arguments。
没有定义形参,那么所有形参会自动存放到arguments这个属性数组中。
JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用:
.全局变量与局部变量
1 <script> 2 i=10; //全局变量 3 var j=20; //全局变量 4 function display(){ 5 var k=30; //局部变量 6 P=40; //全局变量 7 } 8 </script>
在函数内定义的就是局部的,否则就是全局的。局部变量只在局部作用域起作用。如果函数内的变量没有var声明,会直接影响全局的。
机制:在JS中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没找到,继续向上查找,一直查找到全局作用域为止。如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是JS中的作用域链。
局部访问全局通过作用域链,全局访问局部要通过闭包。
“JavaScript设计得最出色的就是它的函数的实现。” -- 《JavaScript语言精粹》
函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为。一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能。
1.函数的功能
代码重复性使用
模块化编程
2.语法:
使用函数前要先定义才能使用
函数定义有三个部分:函数名,参数列表,函数体
格式:
1 function 函数名([参数1, 参数2, ...]){ 2 3 函数执行部分; 4 5 return 表达式; 6 7 }
例如:
1 <script> 2 function display(first,second){ 3 alert(first+second); 4 } 5 var i=10; 6 var j=20; 7 display(i,j); 8 </script>
在上面这个例子当中,first,second是形参,i,j是实参。
在函数执行过程中,形参值得改变不会影响实参。(按值传递)
但是对象数据类型,是按引用传递(按地址传递),其他数据类型都是按值传递。
比如,下面的例子,运行的结果是“aaa”
1 <script> 2 function display(obj){ 3 obj.name='aaa'; 4 } 5 var p= new Object(); 6 p.name = 'bbb'; 7 display(p); 8 alert(p.name); 9 </script>
3.关于函数的返回值问题
函数遇到return会立即返回,后面代码不执行。
4.关于匿名函数
在JS当中每一个变量,包括函数都算是一个对象,都占据了内存地址。函数也是一种对象,占据了内存地址。内存包括,堆内存,栈内存,静态区和代码段。一般来说,变量名保存到栈内存中,变量对象的数据保存带堆内存当中。因为堆比栈大,但栈比堆快。函数会保存到内存当中的代码段中。代码段中的数据的引用是通过栈内存中的一个名字指向的。
1 <script> 2 //变量是可以保存数据的,也可以保存地址的 3 var i=10; 4 alert(i); 5 6 function display(){ 7 alert('123'); 8 } 9 10 i=display; //变量指向了这个函数的首地址 11 i(); //弹出123 12 </script>
在上面这个例子中,function display(){} 其实是,在window对象下添加一个叫display的变量,它指向了这个函数的首地址。其中i=dispaly的意思就是,我们让window对象下的i指向这个函数的首地址。
匿名函数的用法
1 <script> 2 //匿名函数的前期 3 var i=function display(){ 4 alert('123'); 5 } 6 i(); 7 8 //匿名函数的用法 9 var j=function(){ 10 alert('123'); 11 } 12 j(); 13 </script>
5.自调用匿名函数
格式: (function(){})();
function(){} : 相当于返回首地址
(function(){}) : 把这部分看作是一个整体
(function(){})() : 相当于找到这个地址并执行
1 <script> 2 //自调用匿名函数 3 (function(){ 4 alert('111'); 5 })(); 6 7 //带参数的自调用匿名函数 8 (function(para){ 9 alert(para); 10 })(222); 11 </script>
自调用匿名函数的好处是,避免重名,自调用匿名函数只会在运行时执行一次,一般用于初始化。
6.全局变量与局部变量
1 <script> 2 i=10; //全局变量 3 var j=20; //全局变量 4 function display(){ 5 var k=30; //局部变量 6 P=40; //全局变量 7 } 8 </script>
在函数内定义的就是局部的,否则就是全局的。局部变量只在局部作用域起作用。如果函数内的变量没有var声明,会直接影响全局的。
机制:在JS中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没找到,继续向上查找,一直查找到全局作用域为止。如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是JS中的作用域链。
局部访问全局通过作用域链,全局访问局部要通过闭包。
7.arguments的使用
在一个函数内部,可以使用arguments属性,它表示函数的形参列表,是以数组形式体现的。
在定义一个函数的时候,它的实参个数必须要与形参个数保持一致,有时,我们定义函数时,形参数目不能固定,这个时候就要使用arguments。
1 <script> 2 function showname(){ 3 //没有定义形参,那么所有形参会自动存放到arguments这个属性数组中 4 for(var i=0;i<arguments.length;i++){ 5 document.write(arguments[i] + '<br>'); 6 } 7 } 8 showname('zhangsan','lisi','wangwu'); 9 </script>
没有定义形参,那么所有形参会自动存放到arguments这个属性数组中。
相关文章推荐
- 5章6节局部与全局使用同一个变量不同定义的调用
- C_ideas不允许调用库函数,也不允许使用任何全局或局部变量编写 int strlen(char *strDest);
- php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);
- [Python]全局变量的语法及使用
- SQLServer游标(Cursor)简介和使用说明 及全局变量说明和功能
- 让你的javascript函数拥有记忆功能,降低全局变量的使用
- nginx location语法使用及一些全局变量
- 在T—Sql中使用变量 一)局部变量 二)全局变量
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- 使用JNIEnv全局变量调用FindClass()等函数发生crash
- C/C++语法知识精华整理(2)-栈与堆、内存四大区域、 全局变量、线程技术、位字段、函数返回值副本机制等
- DEDECMS建站仿站使用的全局变量调用标签及路径大全整理总结
- python返回值与局部全局变量
- 使用Lua 局部变量来优化性能,同时比较局部变量和全局变量
- 使用JNIEnv全局变量调用FindClass()等函数发生crash
- Andorid WebView获取JS全局变量或者调用方法的返回值
- (转)不允许使用任何全局或局部变量编写 int strlen(char *strDest);
- ajax 异步调用把返回值赋给一个全局变量的用法,最主要的就是把async属性改为 false,
- Bigcommerce: 给模板添加一个自定义的产品属性,使用$GLOBALS全局变量调用
- c/c++中静态局部变量以及全局变量的使用(转)