第一题:
if (!("a" in window)) {
var a = 1;
}
alert(a);
第二题:
var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a);第三题:
function a(x) {
return x * 2;
}
var a;
alert(a);
第四题:
function a() {
alert(this);
}
a.call(null);
以上弹出的对话框的内容是什么?
if (!("a" in window)) {
var a = 1;
}
alert(a);
第二题:
var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a);第三题:
function a(x) {
return x * 2;
}
var a;
alert(a);
第四题:
function a() {
alert(this);
}
a.call(null);
以上弹出的对话框的内容是什么?
解决方案 »
- 我在这个HTML页面上加一段JS代码,达到控制字体和背景颜色,还有控制字体放大缩小的功能
- JavaScript TrimPath 的小问题
- swfupload 批量上传问题 急急急!!
- jquery js function的定义和作用域
- 多行文本框中怎么限制不支持HTML标签?
- 谁由javascript写的Xml的解析器呀,可呀取得父节点的,高分求救
- 能否在javascript脚本中,根据一些逻辑判断的结果,动态改变网页某块区域显示的文本?
- confirm框的返回值
- 怎么在用户按窗口右上角的关闭窗口按钮时写javascript作判断?
- echarts 可行性评估
- IE浏览器 中 "#" 号 和 firefox浏览器 中差异!
- 关于jquery取值问题(分不多了,大哥大姐都过来看看。。。。)
第二题考的是匿名函数问题,其实这个function a(){}是个幌子,答案是1
第三题考的是js的处理顺序 答案是打印出这个函数本身
第四题考的是可以说是上下文的问题 答案是window
在执行钱 会对所有的全局变量检测 并给值undefined
所以 已经有了 window.a
'a' in widnow 为true 'a' in widnow为false2
在执行js执行 函数会提前定义
所以是先有的 函数function a(){}
然后才重新定义的a3
不知道问的是什么
以前面试做过
做错了4
null调用 任何函数
函数里面的this 都指向window
我一直是这么理解的
在执行钱 会对所有的全局变量检测 并给值undefined
所以 已经有了 window.a
'a' in widnow 为true ! 'a' in widnow为false
额,不是说你不知道in的意思,‘a’当然是个常量字符串, 'a' in window就是检测window中是否有a这个属性,你并没有解释为什么 'a' in window为什么是true; 5楼所给的第一题解释个人觉得也挺牵强,什么是全局变量检测? 如果第一题的条件判断语句改成 if('b' in window)呢? 结果又会是怎么样?第一题考察的是,js引擎对var关键字的解析: js引擎首先会对所有var 后面的变量做一个声明,即题目中var a = 1;这个语句, js会拆分成这样: var a;
if (!("a" in window)) {
a = 1;
}
alert(a);
我们知道声明一个变量,没初始化的话,就是undefined,所以显示undefined, 如果没申明变量,直接alert的话,是会出错的对吧?
return 1;
}
var value;
alert(typeof value); function value(){
return 1;
}
var value = 1;
alert(typeof value);
if (!("a" in window)) {
a = 1;
}
alert(a);你说的没错,'a'这个字符串常量对应window['a']这个属性。也就是全局变量(window属性)不假
同时你在if() {
}
里声明和赋值也不假但是由于js没有这个块作用域,所以线程栈上会先遍历全局变量的声明。
如果说是考察对js的变量解析的话,那么function也算是全局属性的特征。即,var 也好 function也好 都是优先加载 而赋值语句(包括未加var的声明语句)的都是执行到了才执行。你的拆分理解上没问题,但是感觉出题有点牵强吧
var 预加载
function 预加载
顺序执行
function()内部也有个预加载过程 即在function第一次调用的时候 里面的执行顺序也是var 预加载
function 预加载
顺序执行。
我不对
我只是说了自己的理解 而且说的不严谨
且我没拿出证据不过lz也一样 只是说了自己的理解 没拿出证据
http://bbs.51js.com/viewthread.php?tid=82591ps 这些与js牛不牛没关系
自己学了这部分就知道 不学究不知道 学了但是很久没看了 也可能会不记得在ps 有几个问题问下lz
解释的时候 麻烦给出相关链接
也可以不给出
function x(a){
delete a
return a
}
x({c:'c'});
a是什么
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
返回的什么值
第二个似乎是在考察对象字面量和“类对象”中对this的区别。楼主的标题确实让人有点,
ecmascript
里面专门有介绍 看看对ecmascript 了解不
( 当然不知道 也不能说明你对ecmascript 不了解 看了很多 没有注意arguments这部分也很正常)第2题里面有
陷阱
我之前做的时候做错了
之前飞之石版主也是拿这个题做解释
其实他也解释错了
见 http://topic.csdn.net/u/20101225/14/8c34eb94-0de3-45de-91a9-8f24ba103c46.html?75332
我是想拿来 看看lz是不是那种很严谨的人
delete只能删除属性。所以 如果你传个参数进来的话 即使不考虑arguments 也会无效的
风之石解释是正确的 我们都像他学习
但是例子真弄错了6.
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);A “undefined”B “object”C “number”D “function” 答案为:Athis的标识问题,注意arguments[0]();其实就是要去执行function() { return this.baz; },此时,this为global Object,即window,而window上木有baz属性或变量。 var bar =123;
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0](); //这里还是undefined
})(foo.bar);因为在返回那个地方用的是arguments[0]()
arguments的0属性的方法 this 指向的是arguments var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
arguments.baz=123
alert(typeof arguments[0]());
})(foo.bar);其实这样才是风之石的本意
var baz=3
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(a){
alert(typeof a());
})(foo.bar);
PS: 这些题目之所以拿出来的目的,是因为大部分搞JS的朋友以及学习JS的朋友,在平常的经典JS书中,这些都是未曾提到的. 而你发的那些题,只要认真的看过一些经典的JS书都可以轻松的做出来!
第一,js的作用域以function为界,而不是常见的以大花括号为界;
第二,function f(){……}定义了一个“变量”名为f,但仅限于直接function f(){……}定义,至于用该定义去给变量赋值则另论,具体是:IE认f,而fireforx不认这个横空出世的f。因此在IE中,var f=function f1(){};
f、f1都是function;但在FF中,如果这样来,则只认f,而不认f1,除非下面补充(或者上面补充)f1的定义
第三,js引擎先扫描所有全局下面的定义,然后从上到下赋值——这只是一个普通原则,实际上函数的定义要更早一些,也就是第二点中提到的function f1(){}用作赋值的时候,f1首先被赋值成为function。因此,
var f1=1;
var f2=function f1(){};
首先定义f1,然后给它赋值为function,然后回过头去给它赋值数字1。这也是为什么接下来如果打印的话给出1的原因。定义变量在同一个作用域内不分先后。
但是对基础知识要知道怎么回事,prototype、原型链、apply、call、callee、caller和js中的一些基本对象搞明白了,在日程开发中足够我们自己使用的,至于楼主这样的定义在开发中我们一般是不会用到的。
if (!(a in window)) {
var a = 1;
}
alert(a);这样,browser出来的结果才是“undefined”。
if (!("a" in window)) {
var a = 1;
}
alert(a);各个浏览器 IE,FF, SAFRIA, GoogleChrome都是弹出1.一帮人居然在讨论这玩意。
我看了下如果把if (!("a" in window)) 这个判断改成if (!(a in window))
那才是判断一个变量是否属于 window
不知道你的是啥版本?这边IE8,FF3.6都是 undefined
undefined
------------
英文版
2、有些特性或者语法规则在js的项目中有他独到的应用,不知道你的程序中用过几次arguments呢。网上巧妙利用arguments的技巧多的很。真搞
楼主的几题都是用到了相同的变量名 你一股脑儿都粘贴到一块去 你说显示什么。
最后举个例子: var a;
alert(a in window);
alert('a' in window);
第一个对话框为true,第二个为false。 第一个等价于alert('undefined' in window);
这个意思应该明了了吧!
所以遇到JS问题我优先采用JQUERY。
或者找其他的插件。如果这两个方法都行不通,好吧,换个思路解题。