javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列
1.1 知识点
- 函数:就是可以重复执行的代码块
- 2. 组成:参数,功能,返回值
- 为什么要用函数,因为一部分代码使用次数会很多,所以封装起来, 需要的时候调用
- 函数不调用,自己不会执行
- 同名函数会覆盖,后面的覆盖前面的
- 函数名等于整个函数,打印函数名,就等于打印整个函数的代码
- 7. 加载函数的时候只加载函数名,不加载函数体
- 参数相当于局部变量
- 两个平级的函数中变量不会相互影响
- 10. 预解析:函数在解释文档的时候会被整体提到文档的最前面,和加载不一样
- 第一种:解析的时候会被提前,可在任何地方使用和定义
1.2 函数的定义
- 第一种:解析的时候会被提前,可在任何地方使用和定义
1. function fun ( a , b ) { 函数体;return ; }
- 第二种:函数不会被提前,使用必须在定义之后
2. var fn2 = function ( ){函数体;}
3. //函数名可有可无,无名叫匿名函数
- 第三种:函数不会被提前,使用必须在定义之后,如果函数体不加引号,不调用也会执行
1. var fn3 = new Function(“函数体;”);
1.3 函数的参数
- 设置参数可解决修改值不修改规则这个问题。
- 增强函数的功能性,和程序员的交互性,和函数的可拓展性
- JS没有方法重载
- 规则中有几个变化的数(操作数),就定义几个参数
- 函数可嵌套
- 开闭原则
- Math.sqrt( ); 开平方
形参
- 形式上参与运算的值,作用是为实参占位置
- 实际上参与运算的值
- 实参要进行运算,必须要有形参占位置
- 相等,正常执行
- 实参个数大于形参,正常执行,多去的舍弃不用
- 形参大于实参,看程序是否出错
实参
形参的个数和实参的个数不一样
a) 计算会得到NaN
b) 实参值是undefined 为给定实参的形参是undefined
c) 任何值和undefined计算都的NaN
1.4返回值
- 执行函数完毕之后,返回的数据
- 函数程序运行后的结果外边需要使用的时候,我们不能直接给予,需要通过return返回
- 作用:函数执行完成以后,结果就是返回值
- 有return的函数就有返回值,反之则没有
- 把函数内部的值赋值给外部
- 6. 如果没有return或者只有return没有值,函数默认返回undefined
- 函数执行完return后会立即结束,return后面的代码不会执行
- 函数的返回值必须要执行才可以得到
- 外部要用那个值,我们就返回哪个值
- return可以截断循环
- Math.round()四舍五入
- Math.pow( a , n); a的n次幂
- Math.floor();地板函数
- var s = Math.floor( Math.randow() * (max-min+1) + min ); //生成min-max之间的随机数
- 函数内用的必须是形参的数组
- bubble 冒泡
- 冒泡排序极限后会出现问题
var arr = [4,435,234,1223,645,341,123,124,562];
function bubble(arr) {
for(var i=0;i<arr.length-1;i++){
var flag = true;
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;
}
}
if(flag){
break;
// 此处若直接使用return(arr) ,则不能返回正确的值,个人理解为,此处为局部变量,不能正确返回
}
}
return(arr);
}
// console.log(bubble(arr))
18.函数通过运算来的数一般都是半成品,需要二次加工
1.5 函数名、函数体和函数加载问题
- 打印函数名,等于打印了整个函数的代码
- 打印执行函数,等于打印函数的返回值
a) 函数包函数先执行内部函数
3. JS加载的时候,只加载函数名,不加载函数体
1.6 变量作用域
局部变量
- 只有局部能够访问的变量
- 函数内部用var定义的变量
- 函数执行完毕后,局部变量被回收
全局变量(成员变量)
- 在哪里都可以访问的变量
- 在函数内部,直接定义变量,不加var为全局变量,函数必须得执行后才可以使用
1.7 隐式全局变量(不要不这样写)
- 一般存在函数之中
a) var a = b = c = 1; //这种情况,b和c都是隐式全局变量
b) var a = 1; b = 2; c = 1; //这种情况,b和c都是隐式全集变量,分号相当于换行
c) var a = 1, b = 2, c = 1; //这种情况,b和c不是隐式全局变量
1.8 预解析:JS解析器
- 查看语法错误
- 变量声明提升(只提升变量名,不提升变量值),
- 把内容加载到内存中
a) 对象加载到堆中
b) 简单类型加载到栈中
- 用function定义的函数整体提升
a) 函数内照样适用
b) 就近原则,
5. 预解析(整体提升函数)和函数加载(只加载函数名)的区别
6. 预解析:检查script标签内的语法,提升函数声明
7. 函数加载:把函数加载到内存中
8. 解析完再加载
// 测试是否是质数
1 function isPrime(n){
for(i=2;i<n/2;i++){
if (n%i == 0 ){
return false;
}
}
return true;
}
confirm (isPrime(7));
斐波那契数列
function fibonacci(n){
if (n<3){
n=1;
return n;
}else {
var k = 1, j = 1;
for (i = 3; i <= n; i++) {
j = j + k;
k = j - k;
}
return j;
}
}
获取输入年月日,确定是今年的第几天
console.log(getDay(2016,3,1));
function getDay(year,month,day){
var arr = [31,28,31,30,31,30,31,31,30,31,30,31];
var sum = day;
if(year%4==0 && year%100!==0 || year%400==0){
arr[1]=29;
}
for(var i=0;i<month-1;i++){
sum += arr[i];
}
return sum ;
}
javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列的更多相关文章
- JS:递归基础及范例——斐波那契数列 、 杨辉三角
定义:程序调用自身的编程技巧称为递归.一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就 ...
- js算法集合(二) javascript实现斐波那契数列 (兔子数列)
js算法集合(二) 斐波那契数列 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列进行研究,来加深对循环的理解. Javascript实 ...
- Stream流实现斐波那契数列
1.前言 我们都知道斐波那契数列有很多种实现方法,在jdk1.8以前没有流操作,只能通过递归或者迭代等其他方式来实现斐波那契数列, 但是jdk1.8以后,有了流操作,我们就可以使用流来实现斐波那契数列 ...
- Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)
Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...
- JS高级. 06 缓存、分析解决递归斐波那契数列、jQuery缓存、沙箱、函数的四种调用方式、call和apply修改函数调用方法
缓存 cache 作用就是将一些常用的数据存储起来 提升性能 cdn //-----------------分析解决递归斐波那契数列<script> //定义一个缓存数组,存储已经计算出来 ...
- HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- Javascript数组求和的方法总结 以及由斐波那契数列得到的启发
一次面试中,面试官要求用三种不同的Javascript方法进行一个数字数组的求和,当时思来想去只想到了使用循环这一种笨方法,因此面试比较失败,在这里总结了六种Javascript进行数组求和的方法,以 ...
- JavaScript生成斐波那契数列
常规写法 https://cn.bing.com/search?q=js+fibonacci+sequence&pc=MOZI&form=MOZSBR //Fibonacci func ...
- 太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数
面试攒经验,let's go! 值此高考来临之际,闲不住的我又双叒叕出发去面试攒经验了,去了公司交待一番流程后,面试官甩给了我一张A4纸,上面写着一道js算法笔试题(一开始我并不知道这是在考察js算法 ...
随机推荐
- Sublime Text 3 修改配色主题【侧边框之...】
Sublime Text3 是挺喜欢的一款编辑器,一周五天朝九晚六面对,而默认的侧边栏颜色总显得不尽人意.右侧的代码高亮[color_scheme:Monokai]挺喜欢的,心里就想着如何把侧边栏也给 ...
- Laravel / Lumen 框架修改 创建时间 和 更新时间 对应字段
为避免浪费时间--先上解决方案 在Model中重写 CREATED_AT 和 UPDATED_AT 两个类常量就可以了,这两个常量分别是创建时间和更新时间的字段名. ================= ...
- php正则表达式(持续更新)
1.字符串替换多个关键字 $pattern = array('/a/', '/a/', '/a/'); $replacement = array('x', 'y', 'z'); $subject = ...
- devexpress显示缓冲滚动条与实现类似QQ消息推送效果
1.一般在项目中处理大数据,或者查询大量数据时,耗时会很长,这个时候缓冲条是必不可少的.这里展示一个devexpress不错的缓冲条,如图所示: 使用到了控件splashScreenManager,运 ...
- Java回调机制解读
模块间调用 在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种: (1)同步调用 同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等 ...
- AR入门系列-在vuforia官网的使用-01-史上最详细AR入门教程
使用高通的vuforiaSDK 网址:https://developer.vuforia.com/ 我们想要使用vuforia首先得注册一个账号 网站会发送邮件给你的邮箱 点击验证链接,验证邮箱 出现 ...
- Android业务组件化之Gradle和Sonatype Nexus搭建私有maven仓库
前言: 公司的业务组件化推进的已经差不多三四个月的时间了,各个业务组件之间的解耦工作已经基本完成,各个业务组件以module的形式存在项目中,然后项目依赖本地的module,多少有点不太利于项目的并行 ...
- UI设计需具备的几大素质
近年来,IT产业对于高端技术人才需求加大,特别是北上广和知名企业对人才需求更为迫切,UI设计人员的正在接受UI培训的学员都赢认识到UI设计在未来要求将越来越高,交互设计越来越新颖也将对用户更加友好,兄 ...
- ERP顾问工作中应该注意哪些工作是不该做的
1.不要轻易对客户说“不“ 当客户提出一个问题顾问要判断一下,是否属于顾问实施的问题,如果属于顾问实施范畴,而自己又不清楚,这时应把问题纪录下来,和客户解释清楚,回去请教资深顾问给与回答,如果该问题不 ...
- 简单总结在51cto平台的两日学习
许久未曾静下心写东西,希望这会是一个好习惯的开始. 一次偶然的机会,大概是160415在Applestore邂逅51cto,看了点评果断下载,着实是一款优秀的学习软件. 由于最近正在用python写自 ...