js函数的各种写法与调用
以下是我见过的各种js函数的各种写法以及调用,虽然有些写法及其调用我不清楚其专业术语叫啥,但并不影响我写一个总结笔记。
我们刚开始接触js语音,经常看到的这种名叫“使用function关键字来定义函数”的写法,如:
function f(e){
alert(e);
}
f("hello world");
把函数赋值给一个变量,这种大概叫“表达式方式定义函数”吧,如:
var f=function(e){
alert(e);
}
f("hello world");
如上,如果省略了函数名,这种也叫“匿名函数”,当然也可以不匿名,给一个函数名,这在用于递归函数时就用到了,如:
var fact=function factTemp(n){
if(n<=1) return 1;
else return n*factTemp(n-1);
}
fact(3); // return 6
还有一种叫“使用构造函数”来定义函数,如:
var f=new Function("x","y","alert(x*y);");
f(2,3); //==>6
以上是三种定义函数的写法及其调用,但是调用还有其他方式:
用call()函数间接调用,如:
function person(name){
this.name=name;
this.sayHi=function(age,blogs){
alert("My name is: "+this.name+";\n age:"+age+";\n blogs:"+blogs);
}
}
function me(name){
this.name=name;
}
var person1=new person("function person");
var me1=new me("function me");
person1.sayHi.call(me1,24,"http://www.cnblogs.com/xiaomou2014"); //本来me1是没有sayHi函数的,经过用call就调用了personal里的sayHi函数了。
同样类似于call的同类函数apply也同样能实现这样子的功能,只不过他的第二个参数是数组而已,如:
function person(name){
this.name=name;
this.sayHi=function(age,blogs){
alert("My name is: "+this.name+";\n age:"+age+";\n blogs:"+blogs);
}
}
function me(name){
this.name=name;
}
var person1=new person("function person");
var me1=new me("function me");
person1.sayHi.apply(me1,[24,"http://www.cnblogs.com/xiaomou2014"]);
函数可以赋值给变量,同时也可以把他直接赋值给对象的属性,如:
var o={ square:function(x){ return x*x; } };
var y=o.square(2); //y=4;
有时候我们定于了一个函数后需要他马上运行,这貌似也挺多见于js插件,如:
(function(){
alert("hello world");
})();
也可以给他一个函数名:
(function f(){
alert("hello world");
})();
第二种:
(function(){
alert("hello world");
}());
同样的我们也可以给他一个函数名:
(function f(){
alert("hello world");
}());
当然也可以给它一个参数:
(function(e){
alert(e);
}("hello world"));
看别人的插件,你会发现人家开头处加了一个";",这样就算页面js有错误,加载运行他的插件也能保证运行,如:
;(function(e){
alert(e);
}("hello world"));
如果一个函数的参数很多,那么我们调用函数的时候并不能很好的记住他的顺序,把参数封装成对象,然后把对象里的一个个属性对应用于参数,这样子很好解决了这个问题,如:
var f=function(args){
sayHi(args.country || "Chinese",
args.name,
args.qq,
args.phone,
args.email)
}
function sayHi(country,name,qq,phone,email){
alert("Hi, I am a "+country+", my name is "+name+";qq:"+qq+";phone:"+phone+";email:"+email);
}
f({name:"xiao",phone:"13888888888",email:"123456@qq.com",qq:123456});
这样子只要把参数名记住了就可以了,不用管他的顺序,同时给需要赋默认值得参数也很方便,如 args.country || "Chinese",如果调用函数的时候没有给country 这一参数实参,那么他的默认值就是chinese了。
js函数的各种写法与调用的更多相关文章
- js函数常见的写法以及调用方法
写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风格的js函数的写法.不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考.1.常规写 ...
- js 函数闭包内部返回函数体调用方法难点解答
今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...
- js函数 test.caller 谁在调用test函数
返回调用指定函数的函数. function test() { if (test.caller === null) console.log('test 函数在全局调用'); // 获取调用 test函数 ...
- js函数的Json写法
https://zhidao.baidu.com/question/83401454.html
- JS 函数创建、封装、调用
一.简单函数创建.封装 第三种就是构造函数 function fun(a,b){ this.firstName=a this.lastName=b } var x=new myFun(Jhon,Dav ...
- JSF页面中使用js函数回调后台action方法
最近遇到了一个问题就是在JSF页面中嵌入html页面,这个html页面中很多功能是使用js动态生成的,现在需要在js函数里想去调用JSF中action类method()方法并动态传送数据给后台进行处理 ...
- js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...
- 浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
在Javascript定义一个函数一般有如下三种方式: 函数关键字(function)语句: function fnMethodName(x){alert(x);} 函数字面量(Function Li ...
- js函数声明外面使用小括号括起来再接一个小括号的写法
js函数声明外面使用小括号括起来再接一个小括号的写法 (function(){})(); (function(){}()); !function(){}(); 总结ps:意思将函数声明变成,直接执行的 ...
随机推荐
- webuploader文件上传问题总结
webuploader百度的一个很好的上传文件插件: 选择它的原因: 1.浏览器兼容性好,支持IE8,这是我最主要的,好多上传插件都不支持: 2.跨域访问,因为我的上传需要到图片服务器上,这就需要跨域 ...
- DbUtility-第一次接触
DbUtility这个以前就知道,可是由于底层是4.5的框架,我就一直没有仔细看过,最近自己的开发框架升级到了4.5,就开始学习这个组件. 总体来说,这个组件用起来非常简单.举例说明: await d ...
- New ipad install Metasploit(New ipad 安装Metasploit)
Title:New ipad install Metasploit(New ipad 安装Metasploit) --2012-09-19 11:35 越狱以后,Ssh或者终端Ipad,把屏幕锁定最好 ...
- (摘)Zebra打印机异常处理
一.一般条码打印设备按图指示方向,虚线为碳带安装路径,实线为标签路径.回卷后废碳带不易剥落,则在装入前用废标签的光滑底纸卷在回卷轴上,然后再上碳带.安装标签时,根据不同标签宽度调整限纸器.压头弹簧均匀 ...
- C51的编程规范
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了.作为一门工具,最终的目的就是实现功能.在满足这个前提条件下,我们希望 ...
- 如何获取一个AlertDialog中的EditText中输入的内容
怎么获取一个AlertDialog中的EditText中输入的内容? new AlertDialog.Builder(this) .setTitle("请输入") .set ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)
A.九九归一 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一 题 ...
- Linux系统编程(34)—— socket编程之TCP服务器与客户端的交互
前面几篇中实现的client每次运行只能从命令行读取一个字符串发给服务器,再从服务器收回来,现在我们把它改成交互式的,不断从终端接受用户输入并和server交互. /* client.c */ #in ...
- HDU5125--magic balls(LIS)
题意:求a数组的LIS,但是加了一个条件,为了LIS最大 b[i] a[i]可以交换.最多交换mci: 赤果果的dp啊,可是这个题用线段树的话却会TLE,,由于查询的只是1-x的最大值 因此我们可以用 ...
- HDU-5532(LIS-nlogn)
思路: 解法一: 新的认识get+1,对于一个数组,可以通过记录他'<'和'>'来判断数组的升降序状态,这种方法只需要n的复杂度就可以解决问题,需要注意的一点是,每次删除一个结点在消失两个 ...