流程控制:
任何一门编程语言都有的语法,一个值的控制程序按照怎么样的顺序去执行
JS中有三种控制流程的方法。
顺序选择:
选择结构:
单向选择:
if(条件:这里会返回布尔值,当布尔值为true的时候执行下面代码块。){
代码块}
if(条件){
代码块
}
双向选择:
if(条件){
如果返回true则执行代码块1,
}else{
返回false执行代码块2
}
if(条件){
代码块 1
}else{
代码块 2
}
多向选择:
if(条件1){
条件返回true执行代码块1
}else if(条件2){
条件1返回false,条件2返回true执行代码块2
}else
条件1,2都返回false,执行代码块3
}
if(条件1){
代码块1
}else if(条件2){
代码块2
}else
代码块3
}
switch分支:
case(情况)、break(断开/结束/跳出)、default(默认)、可以理解为if里面的else
当判断值为1的时候执行代码块1,当判断值2的时候执行代码块2,当判断值为n的时候执行代码块n。都不满足执行最后代码块。
switch(判断值){
case 1:
代码块1;break;
case 2:
代码块2;break;
·
·
·
case n:
代码块n;break;
default:
最后代码块;
}
if判断条件为真的条件
a.当不为0的纯数字,则返回真 ;为0,返回为假;
b.非空字符串,返回true; 空字符串"",返回false;
c.所有对象、数组,返回true;null、undefined 返回的是false;
d.当一个函数存在的时候,则为真,否则为假;
循环结构:
do-while循环:
do{
代码块
}while(条件);
while循环:
while(条件){
代码块
}
当条件为true的时候循环执行,
就是当条件为true的时候执行一次然后跳出循环,再来执行while里面的条件进行判断,直到条件不为true。
PS:do-while 和 while 循环 的区别是:前者先循环后判断,后者先判断后循环。
for循环:
for(初始化表达式;条件表达式;循环后的操作){
代码块
}
例如:
for(var i = 0; i <= 10 ; i++){
console.log(i);
}
for(外层初始化表达式;外层条件表达式;外层循环后的操作){
for(里层初始化表达式;里层条件表达式;里层循环后的操作){
代码块
}
}
//外层的for循环控制循环高度(行数)
//里层的for循环控制循环宽度(列数)
ps:在做缓存的时候用false这样做判断:
if(localStorage){
alert("请升级xxxxxx");
}else{
var a = window.localStorage;
}
debugger 可以用来打断点 来查看循环的步骤。
JS的函数
- js编程基本都是函数式编程,可以去解决需要重复实现的功能。
-
函数的定义:
-
通过function来创建一个函数,并给这个函数取一个名字
语法:
function name(){ //name(这里面可以有参数)
代码块
}
name() //调用名字为name的这个函数
-
通过构造函数Function来创建
var 函数名 = new Function(参数1,参数2,···参数n,函数体);
//例如:
var hanshu = new Function("x","y",var z = x + y;return z;");
-
函数表达式:
var 函数名 = function(参数1,参数2,参数3,···,参数n)
{
函数体
}
//例如:
var myName = function(x,y)
{
return x+y;
}
//调用函数
myName(3,5)
//会返回8。
自调用函数
函数表达式可以 "自调用"。
自调用表达式会自动调用。
如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。
通过添加括号,来说明它是一个函数表达式:
(function() {
var x ="我调用我自己";
})();
函数没有返回值的情况:
函数只管执行,不会有任何的返回值。
函数有返回值的情况:
函数执行完了之后,会返回一个值,这个值可以供我们进行使用。
形参和实参
形参:定义一个不存在实际参数的量,只是起到了一个站位的作用,形参没有个数的要求,可以有无数个,但是实际中,我们需要多少个,就定义多少个;
实参:形参没有实际的参数,实参给形参提供实际的参数,实参和形参必须一|一对应。实参的个数和形参的个数可以不一致
arguments :是所有实参的集合,通过下标来获取每一个参数,通过length获取实参的个数。arguments.callee,这个可以拿来看是不是函数。
return 只有函数才能拥有 其他都不能去使用。
function x(形参1,形参2,形参3,...形参n){
}
/*x(实参1,实参2,实参3,...实参n)
形参:定义一个不存在实际参数的量,只是起到了一个站位的作用,
形参没有个数的要求,可以有无数个,但是实际中,我们需要多少个,就定义多少个;
实参:形参没有实际的参数,实参给形参提供实际的参数,实参和形参必须一|一对应。
实参的个数和形参的个数可以不一致*/
全局和局部:
全局:在任何位置都可以去访问全局变量
局部(函数作用域):只能在当前函数中去使用
在函数中使用var去声明一个变量和不使用var 去声明一个变量是有区别的使用var是局部不适用是全局。
作用域链:
当自身没有的时候会向上依次查找直到找到就返回结果,没有就返回报错信息。
isNaN(x) 判断一个数是否是NaN。。返回的是布尔值。
x如果是特殊的非数字值NaN返回的就是true ,如果是其他的值就返回false