function foo() { bar(); var x = 1; } x; bar(); x = 1; } function test() { foo(); // TypeError "foo is not a function" bar(); foo = bar() { }// 名为'bar'的函数声明 }
4.26、如何判断当前脚本运行在浏览器还是node环境中?
通过判断对象是否为window,如果是window,当前脚本运行在浏览器中
4.27、什么是 "use strict"
ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)
设立"严格模式"的目的,主要有以下几个:
a. 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
b. 消除代码运行的一些不安全之处,保证代码运行的安全;
c. 提高编译器效率,增加运行速度;
d. 为未来新版本的Javascript做好铺垫。
注:经过测试IE6,7,8,9均不支持严格模式
参考《》
4.28、eval是做什么的?
函数可计算某个字符串,并执行其中的的 JavaScript 代码。
eval()是一个顶级函数并且跟任何对象无关。
如果字符串表示了一个表达式,eval()会对表达式求值。如果参数表示了一个或多个JavaScript声明, 那么eval()会执行声明。
4.29、JavaScript原型,原型链 ?
原型:
a. 原型是一个对象,其他对象可以通过它实现属性继承。
b. 一个对象的真正原型是被对象内部的[[Prototype]]属性(property)所持有。浏览器支持非标准的访问器__proto__。
c. 在javascript中,一个对象就是任何无序键值对的集合,如果它不是一个主数据类型(undefined,null,boolean,number,string),那它就是一个对象。
原型链:
a. 因为每个对象和原型都有一个原型(注:原型也是一个对象),对象的原型指向对象的父,而父的原型又指向父的父,我们把这种通过原型层层连接起来的关系撑为原型链。
b. 这条链的末端一般总是默认的对象原型。
a.__proto__ = b; b.__proto__ = c; c.__proto__ = {}; //default object {}.__proto__.__proto__; //null
参考《理解JavaScript原型》
4.30、画出此对象的内存图
查看在线代码。
4.31、JQuery与jQuery UI 有啥区别?
jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。
jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等
4.32、jQuery的源码看过吗?能不能简单说一下它的实现原理?
jQuery给我们带来了一个简洁方便的编码模型(1>创建jQuery对象;2>直接使用jQuery对象的属性/方法/事件),
一个强悍的dom元素查找器($),插件式编程接口(jQuery.fn),以及插件初始化的”配置”对象思想
参考《jQuery工作原理解析以及源代码示例》
4.33、jQuery 中如何将数组转化为json字符串
在jQuery1.8.3中有个方法“parseJSON”,在这个方法中会做从string转换为json。
如果当前浏览器支持window.,那就直接调用这个对象中的方法。
如果没有就使用( new Function( "return " + data ) )();执行代码返回。
eval和new Function是有区别的。
4.34、请写出console.log中的内容