一、for in循环
用来遍历对象中的键值对
var obj = {
name:"ahg",
age:18,
job:"ad"
}
for (var key in obj) {
// obj["name"] name常量
//key 为变量。所以[]里边没引号 obj[key]
console.log("key:" + key + " " + "value:" + obj[key]);
}
二、while循环
var num = 2;
// 只要条件成立,就会一直执行循环体里的语句
while (num>3) {
console.log(num);
break;
}
// do while循环 不管条件是否成立,先执行一次循环体里面的语句,然后再判断
do {
console.log(num);
}while(num>3);
三、函数(用来实现某种功能)
函数是一个引用数据类型,在存储的时候,开辟一个堆内存,**把函数里面的代码以字符串进行存储**
- 形参:形式上的参数
- 实参:真实传递的参数
- 实参的类数组:arguments
- arguments.length; //真实传递的实参个数
- arguments[索引]; //获取某个实参
- arguments.callee; //函数执行体里的所有内容(包括注释)
- 函数的返回值:在函数里面,return多少,就返回多少;不写return返回值,就返回undefined
- 函数执行的时候,会形成一个私有作用域,保护里面的私有变量不受外界的干扰,这种机制理解为闭包
接收参数的两种方式
- arguments
- 形参
实名函数
function fn() {
console.log(1);
}
匿名函数
- 函数表达式
// 匿名函数之函数表达式
var fn2 = function () {
console.log(100);
}
fn2();
- 自执行函数(立即执行函数)
// 匿名函数之立即执行函数
(function () {
console.log("立即执行函数方式一");
})();
+function () {
console.log("立即执行函数方式二");
}();
-function () {
console.log("立即执行函数方式三");
}();
~function () {
console.log("立即执行函数方式四");
}();
!function () {
console.log("立即执行函数方式五");
}();
四、ES6的箭头函数
箭头函数里边没有arguments
// 箭头函数
var jt = function (x, y) {
return x+y;
}
console.log("jt:" + jt);
// 箭头函数里边没有arguments实参列表,而是arg
// ...arg 是把实参数组引入
var fun=(...arg)=>{
console.log(arg); //[ 100, 200, 300 ]
}
fun(100,200,300);
// 箭头函数可省略function
var jt1 = (x, y) => {
return x + y;
}
console.log("jt1:" + jt1);
// 如果只有一个形参,可省略小括号
var jt2 = x => {
return x + 1;
}
console.log("jt2:" + jt2);
// 如果函数体里只有一句执行语句,函数体的{}也可省略
var jt3 = (x, y) => x + y;
console.log("jt3:" + jt3);
五、求和!!
普通函数写的求和方法
- 知道实参个数的求和
var sum = function (x, y) {
return x+y;
}
var value = sum(1, 2);
console.log(value);
- 不知道实参个数的求和
// 不知道实参个数并且实参里边包含非有效数字
// 错误的判断有效数字方法
var total3 = function () {
var num = arguments.length;
var res = 0;
for (i=0;i<num;i++) {
// 这个判断是否为有效数字的方法不行
// 因为 Number("12px")==>NaN typeof(NaN)==>"number"
if(typeof(Number(arguments[i])) =="number"){
res+=Number(arguments[i]);
}
}
return res;
}
console.log(total3(1, 2, 3, "12px", "12"));
// 正确的判断有效数字方法
var sum2 = function () {
var res = 0;
var len = arguments.length;
for (i=0;i<len;i++) {
// 判断是否为有效数字,为有效数字则相加
// isNaN(arguments[i]) == false 证明是有效数字
if (!isNaN(arguments[i])) {
res+=Number(arguments[i]);
}
}
return res;
}
var sum2 = sum2(1, 3, 5, "12px", "12");
console.log(sum2);
应用立即执行函数、箭头函数写的求和方法
// 应用箭头函数写的求和方法
var total2 = (...arg) => {
var num = arg.length;
var value2 = 0;
for (i = 0; i < num; i++) {
value2 = value2 + arg[i];
}
return value2;
}
var value2 = total2(3, 2, 3, 4);
console.log(value2);
// 应用立即执行函数写的求和方法
var res = (function () {
var num = arguments.length;
var value2 = 0;
for (i = 0; i < num; i++) {
value2 = value2 + arguments[i];
}
return value2;
})(2, 3, 4)
console.log(res);