JavaScript 笔试拾遗(1)
1.若需给子scope发送消息,需使用哪个方法
- $emit() 是向上冒泡;
- $broadcast() 是向下传播事件 。
2.循环涉及到对象的类型
- 在原型上扩展的可枚举方法,会被for in循环出来;
- 使用object.defineProperty可向对象添加或者修改属性;
- 每个对象都有prototype属性,返回对象类型原型的引用通过hasOwnProperty可判断一个对象以及其原型链上是否具有指定名称的属性;
- 原型链是JS实现继承的一种模型;
- For循环和for in 循环都是按照顺序遍历的。
3.下面的方法都可以用作javascript异步模式的编程
- 回调函数;
- 事件监听;
- 发布/订阅;
- Promises对象。
4.concat()方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本,返回一个新的数组。该数组是通过把所有的arrayX参数添加到arryaObject中生成的,如果要进行 concat()操作的参数是数组,那么添加的是数组中的元素,而不是数组。
5.下面三个关于事件对象的方法:
- stopPropagation() 阻止事件冒泡, 这个事件不会阻止定义在元素上的其他事件;
- stopImmediatePropagation() 会彻底的阻止事件, 在其之后的绑定在元素上的其他监听事件都不会触发;
- preventDefault() 阻止事件的默认动作。
6.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
for(var i=0;i<5;++i){
setTimeout(function(){
console.log(i+ ' ');
},100);
}
等到匿名函数执行的时刻,i早就已变成5了。
7.scope: true和transclude: true会创建新的子作用域,并且进行原型继承;
scope: {…} 会创建新的独立作用域,不会进行原型继承;
8.如何遍历下面的 my_data 对象?
var my_data={a:’Ape’, b:’Banana’, c:’Citronella’};
for(var key in my_data) {}
9.假设 output 是一个函数,输出一行文本。下面的语句输出结果是什么?
output(typeof (function() {output(“Hello World!”)})());
Hello World! undefined
由内向外
10.function foo() {}是普通的函数声明(f小写)
Function构造函数,正确写法:
var foo = new Function();
function Foo(){
var i=0;
return function(){
document.write(i++);
}
}
var f1=Foo(),
f2=Foo();
f1();
f1();
f2();
输出
0 1 0
f1,f2是独立的作用域 i++ 先执行后加,所以第一次为0第二次为1
var a,b;
(function(){
alert(a);
alert(b);
var a=b=3;
alert(a);
alert(b);
})();
alert(a);
alert(b);
输出
undefined,undefined,3,3,undefined,3
b是全局变量