javascript笔试题(2)
2016-05-17 19:17
549 查看
手动锚点 : javascript笔试题(1)
结果:“undefined”
改写一下:
foo.bar执行的时候上下文是 foo,但是当 把 foo.bar 赋值给 f 的时候,f 的上下文环境是 window ,是没有 baz 的,所以是 ”undefined”
测试一下
![](http://img.blog.csdn.net/20160517170455867)
附一只博文:谈谈Javascript的this指针
手贱,给f绑定上作用域试试
![](http://img.blog.csdn.net/20160517172510520)
看出call的用途了。。
结果:“number”
var x = (1, 2, 3);
x;
x的值是3,这表明,当你有一系列的组合在一起,并由逗号分隔的表达式,它们从左到右进行计算,但只有最后一个表达式的结果保存。
改写一下:
好的啦。返回的是2,是个数字
答案:”1undefined“
上文引用的汤姆叔叔的文中提到,function如果是其他赋值语句的一部分,那么function是函数表达式,()包括的functioon也被看作函数表达式。
而函数表达式,长这样:
f不但可以省略,而且只在函数内部有意义,在函数外部就是undefined。
好吧不信我们测试一下:
![](http://img.blog.csdn.net/20160517173736912)
所以既然f在外部没有定义,typeof f就返回 “undefined”字符串
1+=“undefined”表达式中1强转成字符串,与后面的字符串相连。结果就是 “1undefined”了。
答案:2
函数声明提升。第二个函数声明把第一个声明覆盖了
答案:false
手贱改成这样子
结果:true
instanceof检测的是是不是属于某个类。
new f()返回了f,与f是相等的。所以instanceof返回false,===返回true
手贱,又改成这样子:
结果:true
结果:true
如果函数没有返回值,就返回this。this指向的是调用函数的执行上下文。
new操作都干了什么呢?
第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的proto成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数。
this指针此时指向了f()。instanceof查找原型链上有function f(){},所以返回true。
结果:”string”
改写一下就是
只要知道typeof返回的是字符串就好啦
结果:“undefined”
改写
x没有bar属性 ,返回undefined。
第七题
var foo = { bar: function(){ return this.baz; }, baz: 1 } typeof (f = foo.bar)();
结果:“undefined”
改写一下:
var foo = { bar: function(){ return this.baz; }, baz: 1 } f = foo.bar; typeof f();
foo.bar执行的时候上下文是 foo,但是当 把 foo.bar 赋值给 f 的时候,f 的上下文环境是 window ,是没有 baz 的,所以是 ”undefined”
测试一下
var foo = { bar: function(){ return this.baz; }, baz: 1 } f = foo.bar; console.log(typeof f()); console.log(typeof foo.bar());
附一只博文:谈谈Javascript的this指针
手贱,给f绑定上作用域试试
var foo = { bar: function(){ return this.baz; }, baz: 1 } f = foo.bar; console.log(typeof f.call(foo)); console.log(typeof foo.bar());
看出call的用途了。。
第八题
var f = (function f(){ return "1"; }, function g(){ return 2; })(); typeof f;
结果:“number”
var x = (1, 2, 3);
x;
x的值是3,这表明,当你有一系列的组合在一起,并由逗号分隔的表达式,它们从左到右进行计算,但只有最后一个表达式的结果保存。
改写一下:
var f = (function g(){ return 2; })(); typeof f;
好的啦。返回的是2,是个数字
第九题
var x = 1; if (function f(){}) { x += typeof f; } x;
答案:”1undefined“
上文引用的汤姆叔叔的文中提到,function如果是其他赋值语句的一部分,那么function是函数表达式,()包括的functioon也被看作函数表达式。
而函数表达式,长这样:
//[f]表示可以省略函数名字f a=function [f](){}
f不但可以省略,而且只在函数内部有意义,在函数外部就是undefined。
好吧不信我们测试一下:
所以既然f在外部没有定义,typeof f就返回 “undefined”字符串
1+=“undefined”表达式中1强转成字符串,与后面的字符串相连。结果就是 “1undefined”了。
第十题
(function f(){ function f(){ return 1; } return f(); function f(){ return 2; } })();
答案:2
函数声明提升。第二个函数声明把第一个声明覆盖了
第十一题
function f(){ return f; } new f() instanceof f;
答案:false
手贱改成这样子
function f(){ return f; } console.log(new f() === f);
结果:true
instanceof检测的是是不是属于某个类。
new f()返回了f,与f是相等的。所以instanceof返回false,===返回true
手贱,又改成这样子:
function f(){ return this; } console.log(new f() instanceof f);
结果:true
function f(){} console.log(new f() instanceof f);
结果:true
如果函数没有返回值,就返回this。this指向的是调用函数的执行上下文。
new操作都干了什么呢?
var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);
第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的proto成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数。
this指针此时指向了f()。instanceof查找原型链上有function f(){},所以返回true。
第十二题
var x = [typeof x, typeof y][1]; typeof typeof x;
结果:”string”
改写一下就是
var x=typeof y; var res=typeof x//"undefined" typeof res//typeof "undefined" --"string"
只要知道typeof返回的是字符串就好啦
题目十三
function(foo){ return typeof foo.bar; })({ foo: { bar: 1 } });
结果:“undefined”
改写
var x={foo:{bar:1}}; return typeof x.bar;
x没有bar属性 ,返回undefined。
相关文章推荐
- js 跨域 post 还有get
- js学习之math对象
- JSP-表单元素示例
- JSP中文编码问题
- C# 解析JSON方法总结
- 深入理解javascript系列,读书笔记
- JS日期时间类型(Y-m-d H:i:s)与时间戳互转
- 深入学习JS: __doPostBack函数
- 12个JavaScript技巧
- expressjs中的错误处理中间件
- JSON-OC 转换对照表
- 世界国家中英文名称以及地区区号json格式
- 利用platform库获取浏览器和操作系统版本
- JVM调优- jstat(转)
- Hammer.js v1.0.5 在Surface上使用Chrome时,手指点击时放大
- [Anuglrjs]系列——学习与实践
- a href=#与 a href=javascript:void(0) 的区别
- js json转字符串
- javascript
- Gson问题汇总