公司的JS笔试题~你能的JS基础牢不牢!嘿嘿
代码
1
var
flag
=
true
;
2 var flag2 = true ;
3 if (flag == true )
4 {
5 var i = 0 ;
6
7 j = 1 ;
8
9 if (flag2 == true )
10 {
11 for ( var m = 0 ;m < 10 ;m ++ )
12 {
13
14 }
15 }
16 }
17
18 alert(i);
19 alert(j);
20 alert(m);
2 var flag2 = true ;
3 if (flag == true )
4 {
5 var i = 0 ;
6
7 j = 1 ;
8
9 if (flag2 == true )
10 {
11 for ( var m = 0 ;m < 10 ;m ++ )
12 {
13
14 }
15 }
16 }
17
18 alert(i);
19 alert(j);
20 alert(m);
// 输出 0, 1, 10
var
x
=
1
;
function ScopeTest(){
alert( x );
}
ScopeTest(); // 输出 1
function ScopeTest(){
alert( x );
}
ScopeTest(); // 输出 1
// 输出 1
var
x
=
1
;
function ScopeTest(){
alert( x );
var x = ' hello world ' ;
alert( x );
}
ScopeTest();
function ScopeTest(){
alert( x );
var x = ' hello world ' ;
alert( x );
}
ScopeTest();
// 输出 underfined, hello world
var
name
=
'
laruence
'
;
function echo()
{
alert(name);
}
function env()
{
var name = ' eve ' ;
echo();
}
env();
function echo()
{
alert(name);
}
function env()
{
var name = ' eve ' ;
echo();
}
env();
// 输出 laruence
function
test(xxx){
alert(xxx);
var xxx = 123 ;
function xxx(){
}
alert(xxx);
}
test( 444 );
alert(xxx);
var xxx = 123 ;
function xxx(){
}
alert(xxx);
}
test( 444 );
// 输出 function xxx(){},123
代码
function
JSClass() {
this .m_Text = ' division element ' ;
this .m_Element = document.createElement( ' DIV ' );
this .m_Element.innerHTML = this .m_Text;
this .m_Element.attachEvent( ' onclick ' , this .ToString);
}
JSClass.prototype.Render = function () {
document.body.appendChild( this .m_Element);
}
JSClass.prototype.ToString = function () {
alert( this .m_Text);
};
var jc = new JSClass();
jc.Render(); // 添加渲染div元素
jc.ToString(); // 输出 division element
// click添加的div元素division element会输出underfined,为什么?
this .m_Text = ' division element ' ;
this .m_Element = document.createElement( ' DIV ' );
this .m_Element.innerHTML = this .m_Text;
this .m_Element.attachEvent( ' onclick ' , this .ToString);
}
JSClass.prototype.Render = function () {
document.body.appendChild( this .m_Element);
}
JSClass.prototype.ToString = function () {
alert( this .m_Text);
};
var jc = new JSClass();
jc.Render(); // 添加渲染div元素
jc.ToString(); // 输出 division element
// click添加的div元素division element会输出underfined,为什么?
//click添加的div元素division element会输出underfined,为什么?
//这时的EventHandler()方法中的this关键字,指示的对象是IE的window对象。
//这是因为EventHandler只是一个普通的函数,对于attachEvent后,
//脚本引擎对它的调用和div对象本身没有任何的关系。同时你可以再看看EventHandler的caller属性,
//它是等于null的。如果我们要在这个方法中获得div对象引用,应该使用:this.event.srcElement。
代码
var
obj
=
{
i: " test " ,
m: function () {
alert( this .i); // 指向obj对象 实例,输出值test
function B() {
alert( this .i); // 输出值undefined
// 调用B的实例是m,不是obj,所以this就是m
// m里面没有i,所以默认会加上一句var i;当然是underfined。
}
B();
}
}
obj.m();
i: " test " ,
m: function () {
alert( this .i); // 指向obj对象 实例,输出值test
function B() {
alert( this .i); // 输出值undefined
// 调用B的实例是m,不是obj,所以this就是m
// m里面没有i,所以默认会加上一句var i;当然是underfined。
}
B();
}
}
obj.m();
代码
代码
1
.
var
obj
=
{
2 . i : " test " ,
3 . m : function (){
4 . alert( this .i); // 指向obj对象 ,值test
5 . function B(){
6 . var i = 1 ;
7 . alert( this .i); // 指向window对象,值undefined
8 . }
9 . B(); // B并不是window的方法,this为什么也指向window??????
10 . }
11 . }
12 . obj.m();
2 . i : " test " ,
3 . m : function (){
4 . alert( this .i); // 指向obj对象 ,值test
5 . function B(){
6 . var i = 1 ;
7 . alert( this .i); // 指向window对象,值undefined
8 . }
9 . B(); // B并不是window的方法,this为什么也指向window??????
10 . }
11 . }
12 . obj.m();
//this指向的是当前函数的作用域,而不是函数的调用者
//函数的作用域在其定义时已经确定,但可以动态改变.
//行内嵌js作用域会出现比较特别诡异的情况,不推荐这种写法.
主要考察JS知识点:
- JavaScript是解释性动态语言,不是编译性静态语言
- 在JS中”一切皆是对象, 函数也是”
- JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
- JavaScript没有块级作用域。
- JavaScript的变量作用域是基于其特有的作用域链的
- 函数中声明的变量在整个函数中都有定义
- 函数体内部,局部变量的优先级比同名的全局变量高。
- 未使用var关键字定义的变量都是全局变量。
- 全局变量都是window对象的属性
- JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
- ( 在JS中, 有预编译/预解释的过程,JS的预编译是以段为处理单元的,JS在执行每一段JS代码之前, 都会首先处理var关键字和function定义式(函数定义式和函数表达式)。在调用函数执行之前, 会首先创建一个活动对象, 然后搜寻这个函数中的局部变量定义,和函数定义, 将变量名和函数名都做为这个活动对象的同名属性, 对于局部变量定义,变量的值会在真正执行的时候才计算, 此时只是简单的赋为undefined. )