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算法 ...
随机推荐
- C++编程练习(7)----“KMP模式匹配算法“字符串匹配
子串在主串中的定位操作通常称做串的模式匹配. KMP模式匹配算法实现: /* Index_KMP.h头文件 */ #include<string> #include<sstream& ...
- arcpy.mapping常用四大件-Layer
arcpy.mapping常用四大件-Layer by 李远祥 图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关.首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在 ...
- 2017<java技术>预备作业计科冀浩然
1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系是相互融洽的,老师能够在上课的时候尽量多的教我们专业知识,可以尽量多和我们进行互动,课下能和我们如同朋友一般就可以了. 2.你 ...
- Jasmine 的自定义部分
自定义toEqual toEqual mathers 支持用户自定义比较方法,使用的是jasmine.addCustomEquallyTester(myCustomEqualltyFunction)方 ...
- iOS Storyboard创建APP 的国际化操作
Storyboard创建APP 的国际化操作 最近在看<X-code江湖录>这本书,看到了APP 国际化这点,刚刚也简单的实践了一下.现在和大家分享分享! 写的这个简单的Demo全都是用 ...
- java泛型简单学习
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public st ...
- tomcat基础应用
1. Tomcat版本和支持的API和JDK版本 Apache Tomcat Servlet API JSP API JDK 7.0 3.0 2.2 1.6 6.0 2.5 2.1 1.5 5.5 2 ...
- flume-sink报错 java.lang.IllegalStateException: close() called when transaction is OPEN - you must either commit or rollback first
1. 确认代码无误(根据情况修改,表示若获得不了数据不会自动commit或者rollback): Event event = channel.take(); if (event == null) { ...
- Altium Designer(DXP)小技巧之模块化布局
原创博客转载需注明地址 在我们用Altium Designer进行电路板的绘制的时候经常会遇到模块化布局的问题 就比如电源模块(电源芯片及其外围芯片)放在一起 传感器模块(传感器芯片及其外围芯片)放在 ...
- Angular企业级开发(8)-控制器的作用域
scope概念 scope(作用域)是视图和控制器之间的桥梁,scope本身是一个对象,有方法和属性.scope可以应用在视图和控制器上. scope简单示例 <!DOCTYPE html> ...