前端面试题整理
// 案例1
// var a = 25;
// function abc() {
// alert(a);
// var a = 10;//就近原则;
// }
// abc(); undefined
// 案例2:变量声明提升在函数声明提升之前
// console.log(a); 'aaaaa'
// function a() {
// console.log('aaaaa');
// }
// var a = 1;
// console.log(a); 1
// 1、-----------------------------------
// var num = 10;
// fun();
// function fun() {
// console.log(num);//变量声明提升,就近原则使用变量;
// var num = 20;
// }undefined
//2、-----------------------------------
// var a = 18;
// f1();
// function f1() {
// var b = 9;
// console.log(a); undefined
// console.log(b); 9
// var a = '123';
// }
// 3、-----------------------------------
// f1();
// console.log(c);
// console.log(b);
// console.log(a);//不是全局变量,所以报错
// function f1() {
// var a = b = c = 9;
// console.log(a);//局部变量不可能升级到全局范围内
// console.log(b);
// console.log(c);
// }
说明://1.定义变量全局的进入script就定义;进入函数立即定义;
//2.隐式全局变量只能出现在面试中;全部使用var定义;
//3.预解析,只能是面试;
//4.js中没有块儿级作用域;for循环中的i看情况,看for是否在函数中;
事件流:
//关于事件流理解
//事件流涉及三个部分,
//1、事件绑定,解绑
//利用.的方式绑定事件会出现事件层叠。在DOM2中出现事件监听事件的方法,addEventListener
//但是该方法兼容性有问题,对IE6,7,8不兼容要使用attachEvent;注意:使用什么方法绑定事件
//就应该用对应的方法解绑。
//2、事件对象,事件对象也有兼容性问题。
//谷歌支持该参数,也支持直接书写
//火狐支持该参数,但不支持直接书写需要传承。
// IE6,7,8不支持参数要用window.event。
event = event || window.event;
//event有一些属性和方法,方法中使用最多的就是阻住冒泡事件如: event.stopPropagation(),
//相对于IE6,7,8则使用event.cancelBubble=true;属性设置的。
//属性: 事件引发者,这里不一定是事件源。
//兼容性问题
//target = event.target || event.srcElement;
//3、事件传播阶段: 捕获,目标,冒泡
//可以利用event.eventPhase;来表明该元素属于哪个阶段
//利用事件绑定时的第三个参数,设置事件传播类型。如果不设置默认为false,冒泡。如果为true,
//则为捕获。IE6,7,8中不支持捕获。