js中的函数
【函数的声明及调用】
基础知识
1、函数声明的格式:
function 函数名(参数1,参数2,....){
//函数体
return 结果;
}
>>>函数调用的格式:
直接调用:函数名(参数1的值,参数2的值,...)
事件调用:事件名=函数名();
2、函数声明的几点强调:
① 函数名的声明,必须符合小驼峰法则(首字母小写,之后每个单词首字母大写);
② 参数列表,可以有参数,可以无参数。分别称为有参函数,无参函数;
③ 声明函数时的参数列表,称为“形参列表”(变量的名);
调用函数时的参数列表,称为“实参列表”(变量的值);
函数中,实际有效的参数取决于实参的赋值,未被赋值的形参,将为Undefined;
④ 函数如果需要返回值,可用return返回结果。
调用函数时,使用var 变量名=函数名();的方式,接收返回结果;
如果没有返回值,则接收的结果为Undefined;
⑤ 函数中变量的作用域:
在函数中,使用var声明的变量,默认为函数的局部变量,只在函数内容能用;
不用var声明的变量,默认为全局变量(函数的全局变量必须在函数调用后才能使用);
函数的形参列表,为函数局部变量,只在函数内部能用;
⑥ 函数声明与函数调用没有先后之分,即调用语句可写在声明语句之前;
function func1(){
console.log("调用无参函数");
}
function func2(num1,num2,num3){
var num=num1;
console.log("调用有参函数");
console.log("num为:"+num);
console.log("参数一为:"+num1);
console.log("参数二为:"+num2);
console.log("参数三为:"+num3);
}
var num = func2(1,2,3);
【匿名函数的调用】
1、声明一个匿名函数,直接赋给某个事件;
window.onload=function(){}
2、使用函数表达式,声明匿名函数;
声明函数表达式:var func = function(){}
调用函数表达式:func();
>>>使用匿名函数表达式,则调用语句,必须在声明语句之后,
否则报错(对比常规函数声明与调用区别);
3、使用自执行函数声明并直接调用匿名函数;
① !function(参数一){}(参数一的值 ); //使用任意运算符开头,一般使用!
② (function(){}());//使用()将匿名函数及之后的括号包裹
③ (function(){})();//使用()只包裹匿名函数表达式
三种写法的特点:
① 结构清晰,开头加!结尾加().不容易乱,推荐使用
② 可以表明匿名函数与之后的()为一个整体,推荐使用
③ 无法表明函数与之后的()为一个整体,不推荐使用
window.onload=function(){
console.log("使用window.onload调用匿名事件");
}
var func3 = function(){
console.log("使用函数表达式,调用匿名事件");
}
/*
[函数内部的作用对象]
Arguments对象
1、作用:用于保存调用函数时,所赋值的实参列表。
>>>>当我们调用函数,并使用实参赋值时,实际上参数已经保存到Arguments数组中。即使没有形参
,也可以使用Arguments[n]的形式调用参数。
2、 Arguments数组的个数取决于实参列表与形参无关(顺序从0开始);
但当第n个位置的形参,实参,Arguments都存在时形参与Arguments是同步的,
(既在函数中修改其中一个的值,另一个会同步变化);
3、Arguments.callee是Arguments的重要属性,用于返回Arguments所在函数的引用。
Arguments.callee() 可以调用自身函数执行。
在函数内部调用函数自身的写法被称为递归,所以Arguments.callee()是递归调用时常用的方式;
this
指向函数调用语句所在的作用域,即谁调用函数,this指向谁;
console.log(num)
var num = 10;
funcN()
function funcN(){}
[JS中代码执行顺序]
JS中代码运行,会先进行检查、装载,即声明变量、函数等操作;
然后在进入执行阶段,(变量的赋值等属于执行阶段)。
所以,函数的声明属于检查装载阶段,函数的调用属于执行阶段。so,函数调用语句写在哈数声明语句之前,并没有任何关系。
所以,上述代码,执行流入
-------检查装载阶段-------
var num; //声明变量
function func() // 声明函数
-------检查装载阶段-------
console.log(num) ;
num = 10 ;
funcN(); //执行函数的{}中的代码
案例
1、用函数编写一个四则运算器
function calc(fu){
num1=parseFloat(prompt("请输入一个数字"));
num2=parseFloat(prompt("请再输入一个数字"));
switch (fu){
case "+" :
console.log(num1+num2);
break;
case "-" :
console.log(num1-num2);
break;
case "*" :
console.log(num1*num2);
break;
break;
case "/" :
console.log(num1/num2);
break;
default:
console.log("输入有误");
break;
}
}
</script>
</head>
<body>
<button onclick="calc('+')">+</button>
<button onclick="calc('-')">-</button>
<button onclick="calc('*')">*</button>
<button onclick="calc('/')">/</button>
</body
2、通过递归计算1+2+3+4+...+10
var sum=0;
!function getsum(num){
sum+=num;
num++;
if (num<=10) {
arguments.callee(num);
}
}(1);
console.log(sum);
3、 /*1!+2!+...+10!=?*/
var sum=0;jie =1;
!function getsum(num){
/*var jie =1;
!function(num1){
jie *=num1;
num1++;
if (num1<=num) {
arguments.callee(num1);
}
}(1);*/
jie *=num;
sum+=jie;
num++;
if (num<=10) {
arguments.callee(num);
}
}(1);
console.log(sum);
js中的函数的更多相关文章
- JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype
一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...
- js中的函数,Date对象,Math对象和数组对象
函数就是完成某个功能的一组语句,js中的函数由关键字 function + 函数名 + 一组参数定义;函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可以使代码的组织结构更多清晰. ...
- js中getByClass()函数
js中getByClass()函数进化史 对于js来说,我想每一个刚接触它的人都应该会抱怨:为什么没有一个通过class来获取元素的方法.尽管现在高版本的浏览器已经支持getElementsByCla ...
- JS中的函数、Bom、DOM及JS事件
本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的 ...
- node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了
最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...
- JS中的函数、BOM和DOM操作
一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */ // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...
- html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结
Day27 html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...
- 前端之js中的函数
函数 函数就是重复执行的代码片. 函数定义与执行 <script type="text/javascript"> // 函数定义 function ...
- JS中的函数节流throttle详解和优化
JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...
- JS中encodeURIComponent函数用php解码的代码
JS中encodeURIComponent函数给中文编码后,如何用php解码?? 前提:编码前的中文可能是gbk,gb2312,utf-8等. 复制代码 代码如下: urldecode() iconv ...
随机推荐
- JDK内置日志系统
1.Java应用中的日志功能 ================= 一般的Java应用程序中都有记录日志的需求,目前主流的记录日志的方法是在应用程序中引入log4j,用log4j来生成日志.其实,JDK ...
- QQ互联第三方登陆 redirect uri is illegal(100010)
想必第一次大家接触QQ第三方登陆都会遇到各种各样的问题,备受折磨,因此,今天我把自己做QQ登陆的过程描述一下,希望给大家提供参考,少走弯路. 在开发之前,我们先了解下QQ登陆的流程 第一:查看熟悉 网 ...
- Item 27: 明白什么时候选择重载,什么时候选择universal引用
本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 Item 26已经解释了,不管是对全局函数还是成员 ...
- OpenCV探索之路(六):边缘检测(canny、sobel、laplacian)
边缘检测的一般步骤: 滤波--消除噪声 增强--使边界轮廓更加明显 检测--选出边缘点 Canny算法 Canny边缘检测算法被很多人推崇为当今最优秀的边缘检测算法,所以我们第一个就介绍他. open ...
- chrome的断点调试
DOM节点变化时触发断点具体触发条件可分3种情况:子节点有变化.节点的属性发生变化或这个节点被删除.可以快速找到对应的事件处理函数. 条件断点 写一个表达式,表达式为 true 时才触发该断点. 在D ...
- 7.java 加解密技术系列之 AES
java 加解密技术系列之 AES 序 概念 原理 应用 代码实现 结束语 序 这篇文章继续介绍对称加密算法,至于今天的主角,不用说,也是个厉害的角色 — — AES.AES 的出现,就是为了来替代原 ...
- nodeJS之路径PATH模块
前面的话 path模块包含一系列处理和转换文件路径的工具集,通过 require('path') 可用来访问这个模块.本文将详细介绍path模块 路径组成 [path.dirname(p)] 返回路径 ...
- 原生js实现图片网格式渐显、渐隐效果
写正文前先吐槽一下:端午放假完第一天去某千人以上公司面试前端工程师,第一轮是我应聘职位的部门小领导,谈的不错,面试主要围绕要用到的技术来:第二轮来了我要说的正主,我了个去,问的问题一个和前端无关,问我 ...
- spring异常处理器
一.本篇文章旨在讨论异常处理器: 1.因为异常处理器在实战中通常用来处理开发人员自定义的运行时异常,所以如果要了解如何自定义运行时异常,请自行搜索相关资料. 2.本文的demo用IndexOutOfB ...
- Hadoop化繁为简(二)—层层递进轻松入门hdfs
层层递进-解开hdfs的面纱 1.hdfs是什么?它与普通服务器的文件系统有什么区别?它的特性有什么? 2.hdfs的工作原理是怎样的? 3.每台机器都单独启动有什么弊端?假设有1000台机器需要启动 ...