一、逻辑语句
和c语言的类似有for ;if;do;do-while;while;break;continue;多了for-in语句,用来枚举对象的属性
for (property in expression) statement
for (var propName in window) {
console.log(propName);
}
注意
- ECMAScript 对象的属性没有顺序。因此,通过 for-in 循环输出的属性名的顺序是不可预测的。 具体来讲,所有属性都会被返回⼀次,但返回的先后次序可能会因浏览器⽽异。
- 建议在使⽤ for-in 循环之前,先检测确认该对象的值不是 null 或 undefined。
switch语句
switch 语句中使用任何数据类型,无论是字符串,还是对象都没有问题。其次,每个 case 的值不⼀定是常量,可以是变量,甚至是表达式。switch 语句在比较值时使用的是全等操作符,因此不会发⽣类型转换(例如,字符串"10"不等于数值 10)
二、 函数
函数定义的格式
function 函数名称(形式参数列表){
逻辑;
}
- 参数的传递
- 存在默认数组:数组名称:arguments,作用:将实际参数赋值给形式参数
只传入了⼀个参数,那么为 arguments[1] 设置的值不会反应到命名参数中。这是因为arguments 对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。 - 无论形式参数个数大于还是小于实际参数个数,函数都会被调用
形式参数个数>实际参数个数 :NaN(没有意义的值)
形式参数个数<实际参数个数 : 会将实际参数的末尾最后一个值去除,前面的值进行运算 - ECMAScript 中的所有参数传递的都是值,不可能通过引⽤传递参数,arguments 的值永远与对应命名参数的值保持同步。
- 在js中定义函数。函数的形式参数不能带数据类型(不能用var来定义)
- 可以有return语句,采用赋值调用,此外位于 return 语句之后的任何代码都永远不会执⾏。
-
函数没有重载
根据上文所述,ECMAScript 函数不能像传统意义上那样,通过两个定义的签名(接受的参数的类型和数量)不同的方式重载。如果在 ECMAScript 中定义了两个名字相同的函数,后定义的函数会覆盖前⾯的。 -
函数的调用
(1)单独调用add(10,20,30,40) ;
(2)赋值调用var c = add(10,20) ;
-
函数声明(可以先调⽤,后声明)
func2(); // 不会报错
function func2() {
alert("func2");
}
- 函数表达式(只能先声明,后调用)
func1(); // 会报错
var func1 = function () {
alert("func1");
}
几个代码的输出结果:
(function() {
console.log(a); //undefined"
var a = "how are you";
console.log(a); // "how are you"
})();
var name = "test1";
(function () {
console.log("Original name was " + name); //“Original name was undefined”
var name = "test2";
console.log("New name is " + name); //"New name is test2"
})();
var name = "test1";
(function (name) {
console.log("Original name was " + name);//"Original name was undefined"
var name = "test2";
console.log("New name is " + name); // "New name is test2"
})();
var name = "test1";
(function (name) {
console.log("Original name was " + name);//"Original name was undefined"
name = "test2";
console.log("New name is " + name);// "New name is test2"
})();
console.log("name is " + name);//"New name is test1"
var name = "test1";
(function () {
console.log("Original name was " + name);//"Original name was test1"
name = "test2";
console.log("New name is " + name);// "New name is test2"
})();
console.log("name is " + name);//"New name is test2"