事件监听
element.addEventListener(*event*, *function*, *useCapture*)
event click等方法
useCapture
true - 事件句柄在捕获阶段执行
false- false- 默认。事件句柄在冒泡阶段执行
实例demo
实参,形参
函数参数包括形参,实参,形参就是函数定义时的参数;实参就是函数调用时传入的参数。由于js是弱类型语言,所以js函数的形参不指定类型。
get(3,4,5,6);
function get(x,y,z) {
console.log(arguments); //[3, 4, 5, 6]获取实参对象是个数组,是实参对象的引用
console.log(x+y+z); //12
}
var fact = function(x) {
if (x <= 1) {
return 1;
} else {
return arguments.callee(x - 1) * x;
}
};
fact(5); //120
阶乘 PS:实参对象有两个特殊属性callee和caller,其中callee属性代指当前正在执行的函数,caller属性代指调用当前正在执行的函数的函数,caller属性不是标准属性,不是所有浏览器都支持。
函数作用域
var scope = "outter";
! function() {
console.log(scope); //undefined
var scope = "inner";
console.log(scope); //inner
}();
console.log(scope); //outter
说明:undefined 由于函数作用域的声明提前特性,这里的scope已经在函数顶部声明,但是没有被赋值,所以scope值为undefined
立即执行函数
- 写法如下
(function() {
console.log("1");
}()); //推荐
(function() {
console.log("2");
})();
! function() {
console.log("3");
}();
void function() {
console.log("4");
}();
~ function() {
console.log("5");
}();
作用 1.保存参数上下文环境;2.作为命名空间。
- 列子 循环中执行异步函数,并且函数参数随循环变化
for (var i = 0; i < 10; i++) {
$.post(url, { index: i }, function() {});
} //for运行完 在执行post 全是i=10
for (var i = 0; i < 10; i++) {
(function(index) { $.post(url, { index: index }, function() {}); }(i));
} //true