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算法 ...
随机推荐
- 使用python制作ArcGIS插件(6)案例分析
利用ArcPy制作航空制图插件 By 李远祥 这是笔者两年多前写的一个面向航路图做的一个插件,基本上将航路图的制作进行流程化,制作成为可交互的插件,只要有航路和机场的信息,就可以直接生成一个航路图,每 ...
- 使用python制作ArcGIS插件(5)其他技巧
使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...
- Cesium原理篇:glTF
关键字:Cesium glTF WebGL技术 大纲: 1 glTF简介,这是一个什么东西,有哪些特点 2 Cesium如何加载,渲染glTF,逻辑结构和关键技术 3 个人总结,从glTF学习如何设计 ...
- 【m元素集合的n个元素子集】
/* m元素集合的n个元素子集 说明: 假设有个集合拥有m个元素,任意的从集合中取出n个元素,则这n个元素所形成的可能子集有那些? 解法: 假设有5个元素的集点,取出3个元素的可能子集如下: {1 2 ...
- 读书笔记 effective c++ Item 8 不要让异常(exceptions)离开析构函数
1.为什么c++不喜欢析构函数抛出异常 C++并没有禁止析构函数出现异常,但是它肯定不鼓励这么做.这是有原因的,考虑下面的代码: class Widget { public: ... ~Widget( ...
- .c与.cpp的区别解析
这几天在练习数据结构等知识的时候,有时遇见文件保存为c后缀则能编译通过,有时又是保存cpp后缀才能通过.对于这个都没能区分清,是自己的基本功问题,于是百度了一下.幸好有许多和我一样有问题的人. 其实简 ...
- Regular Expression(正则表达式)之邮箱验证
正则表达式(regular expression, 常常缩写为RegExp) 是一种用特殊符号编写的模式,描述一个或多个文本字符串.使用正则表达式匹配文本的模式,这样脚本就可以轻松的识别和操作文本.其 ...
- 关于redis 缓存的问题
项目是 星期三上线的 , 今天来的时候有个问题, 我觉得很有价值,所以就记录了一下. 问题描述: 我们是做app 开发 的, 这次开发是要 把 以前的app 的业务 分开,新建一 个app ,这个 ...
- python打印表格式数据,留出正确的空格和段落星号或注释
python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...
- Jquery之JSON的用法
今天讲了Jquery里面JSON的用法,下面是今天讲课给的例子: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" &quo ...