題干
立即執行函數表達式是什么?有什么作用?
回答內容
(function(){alert('我是匿名函數')}())
創建一個獨立的作用域。
這個作用域里面的變量,外面訪問不到(即避免「變量污染」)。
打分
評語
ok
題干
求n!,用遞歸來實現。
回答內容
function factorial(n){
if(n === 1){
return 1
}
return n * factorial(n-1)
}
factorial(3) //6
打分
評語
沒有考慮 n為0 的情況
題干
以下代碼輸出什么?
function getInfo(name, age, sex){
console.log('name:',name);
console.log('age:', age);
console.log('sex:', sex);
console.log(arguments);
arguments[0] = 'valley';
console.log('name', name);
}
getInfo('饑人谷', 2, '男');
getInfo('小谷', 3);
getInfo('男');
回答內容
"name:"
"饑人谷"
"age:"
2
"sex:"
"男"
[object Arguments] {
0: "饑人谷",
1: 2,
2: "男"
}
"name"
"valley"
"name:"
"小谷"
"age:"
3
"sex:"
undefined
[object Arguments] {
0: "小谷",
1: 3
}
"name"
"valley"
"name:"
"男"
"age:"
undefined
"sex:"
undefined
[object Arguments] {
0: "男"
}
"name"
"valley"
打分
評語
題干
寫一個函數,返回參數的平方和?
function sumOfSquares(){
}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10
回答內容
function sumOfSquares(){
var sum=0;
for(var i=0;i<arguments.length;i++){
sum=sum+arguments[i]*arguments[i];
}
return sum;
}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10
打分
評語
題干
如下代碼的輸出?為什么?
console.log(a);
var a = 1;
console.log(b);
回答內容
console.log(a); // undefined。因為下面的var a=1相當于var a,a=1。即聲明了變量a也給a賦值了,因為變量提升的原因,所以在執行第一句時知道了a已經被聲明但是卻沒有被賦值。所以顯示為undefined。
var a = 1;
console.log(b);// 報錯,b is not defined。代碼中沒有聲明變量b也沒有對其賦值,所以顯示為b is not defined,而不是undefined。
打分
評語
題干
如下代碼的輸出?為什么?
sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
回答內容
// hello world
// sayAge is not a function。error,因為下面這個是函數表達式,而函數表達式不會聲明提前,所以sayAge(10)在前面調用是無效的。
打分
評語
題干
寫一個函數squireArr,其參數是一個數組,作用是把數組中的每一項變為原值的平方
var arr = [3, 4, 6]
function squireArr( arr ){
//補全
}
squireArr(arr)
console.log(arr) // [9, 16, 36]
提示
arr 被修改了
回答內容
for(var i = 0; i < arr.length; i++){
arr[i] = arr[i] * arr[i];
}//補全
打分
評語
題干
如下代碼的輸出?為什么?
var x = 10
bar()
function foo() {
console.log(x)
}
function bar(){
var x = 30
foo()
}
回答內容
//10,
function foo() {
console.log(x)
}里面沒有x的賦值,向上找,全局變量里有賦值,所以是10.
打分
評語
題干
寫一個函數squireArr,其參數是一個數組,返回一個新的數組,新數組中的每一項是原數組對應值的平方,原數組不變
var arr = [3, 4, 6]
function squireArr( arr ){
//補全
}
var arr2 = squireArr(arr)
console.log(arr) // [3, 4, 6]
console.log(arr2) // [9, 16, 36]
提示
原數組不變
回答內容
var newArr = [];
for(var i = 0; i < arr.length; i++){
newArr[i] = arr[i] * arr[i];
}
return newArr;
打分
評語
可以使用 map
題干
如下代碼的輸出?為什么?
var x = 10;
bar()
function bar(){
var x = 30;
function foo(){
console.log(x)
}
foo();
}
回答內容
// 30
function foo() {
console.log(x)
}里面沒有x的賦值,向上找var x=30,所以是30.
打分
評語
題干
如下代碼的輸出?為什么?
var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //輸出多少
回答內容
// 2
function fn2(){
console.log(a)
}里沒有賦值,向上找,fn1里有var a=2,所以是2
打分
評語
題干
如下代碼的輸出?為什么?
var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //輸出多少
回答內容
//1
function fn2(){
console.log(a)
}里沒有賦值,向上找,全局變量里var a=1,所以是1
打分
評語
題干
如下代碼的輸出?為什么?
var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //輸出多少
回答內容
// undefined
function fn2(){
console.log(a)
}里面沒有,向上找,fn3里雖然有var a=4,對自身fn3沒有影響,但對內嵌函數有影響。
聲明的最終目的是為了提前使用,即在定義之前使用,如果不需要提前使用就沒有單獨聲明的必要,變量是如此,函數也是如此,所以聲明不會分配存儲空間,只有定義時才會分配存儲空間。函數是單向線,從上向下解析的。
打分
評語
題干
如下代碼的輸出?為什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
回答內容
console.log(obj1 == obj2);
//false 因為obj1和obj2的指針所指向的在堆中的地址不一樣
console.log(obj1 = obj2);
// {a:1,b:2} 將obj2賦值給obj1
console.log(obj1 == obj2);
//由于obj2賦值給obj1,兩個對象所指向的在堆中的地址一致
打分
評語
題干
如下代碼的輸出?為什么?
var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
回答內容
1 //全局變量
[object Object] {
age: 3,
name: "jirengu"
} //全局對象,向上找是var c = { name: 'jirengu', age: 2 },而f2(c) ,函數執行 ++obj.age,所以 age: 3。
打分
評語
題干
寫一篇關于作用域鏈的博客,不少于200字,附上博客鏈接
回答內容
http://www.lxweimin.com/p/22f4115d01e6
打分
評語
題干
寫一個深拷貝函數。
回答內容
function deepCopy(oldObj) {
var newObj = {};
for(var key in oldObj) {
if(typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]);
}else{
newObj[key] = oldObj[key];
}
}
return newObj;
}
打分
評語
typeof null 也是 object
<j-panel-body data-v-1a8c3c17="" class="panelBody"><form data-v-1a8c3c17="" class="el-form">
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
立即執行函數表達式是什么?有什么作用?
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
(function(){alert('我是匿名函數')}())
創建一個獨立的作用域。
這個作用域里面的變量,外面訪問不到(即避免「變量污染」)。<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
ok
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
求n!,用遞歸來實現。
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
function factorial(n){
if(n === 1){
return 1
}
return n * factorial(n-1)
}
factorial(3) //6<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
沒有考慮 n為0 的情況
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
以下代碼輸出什么?
function getInfo(name, age, sex){ console.log('name:',name); console.log('age:', age); console.log('sex:', sex); console.log(arguments); arguments[0] = 'valley'; console.log('name', name); } getInfo('饑人谷', 2, '男'); getInfo('小谷', 3); getInfo('男');
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
"name:"
"饑人谷"
"age:"
2
"sex:"
"男"
[object Arguments] {
0: "饑人谷",
1: 2,
2: "男"
}
"name"
"valley"
"name:"
"小谷"
"age:"
3
"sex:"
undefined
[object Arguments] {
0: "小谷",
1: 3
}
"name"
"valley"
"name:"
"男"
"age:"
undefined
"sex:"
undefined
[object Arguments] {
0: "男"
}
"name"
"valley"<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
寫一個函數,返回參數的平方和?
function sumOfSquares(){ } var result = sumOfSquares(2,3,4) var result2 = sumOfSquares(1,3) console.log(result) //29 console.log(result2) //10
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
function sumOfSquares(){
var sum=0;
for(var i=0;i<arguments.length;i++){
sum=sum+arguments[i]*arguments[i];
}
return sum;
}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
console.log(a); var a = 1; console.log(b);
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
console.log(a); // undefined。因為下面的var a=1相當于var a,a=1。即聲明了變量a也給a賦值了,因為變量提升的原因,所以在執行第一句時知道了a已經被聲明但是卻沒有被賦值。所以顯示為undefined。
var a = 1;
console.log(b);// 報錯,b is not defined。代碼中沒有聲明變量b也沒有對其賦值,所以顯示為b is not defined,而不是undefined。<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
sayName('world'); sayAge(10); function sayName(name){ console.log('hello ', name); } var sayAge = function(age){ console.log(age); };
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
// hello world
// sayAge is not a function。error,因為下面這個是函數表達式,而函數表達式不會聲明提前,所以sayAge(10)在前面調用是無效的。<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
寫一個函數squireArr,其參數是一個數組,作用是把數組中的每一項變為原值的平方
var arr = [3, 4, 6] function squireArr( arr ){ //補全 } squireArr(arr) console.log(arr) // [9, 16, 36]
<label class="el-form-item__label" style="width: 6em;">提示</label>
arr 被修改了
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
for(var i = 0; i < arr.length; i++){
arr[i] = arr[i] * arr[i];
}//補全<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
var x = 10 bar() function foo() { console.log(x) } function bar(){ var x = 30 foo() }
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
//10,
function foo() {
console.log(x)
}里面沒有x的賦值,向上找,全局變量里有賦值,所以是10.<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
-
<label class="el-form-item__label" style="width: 6em;">題干</label>
寫一個函數squireArr,其參數是一個數組,返回一個新的數組,新數組中的每一項是原數組對應值的平方,原數組不變
var arr = [3, 4, 6] function squireArr( arr ){ //補全 } var arr2 = squireArr(arr) console.log(arr) // [3, 4, 6] console.log(arr2) // [9, 16, 36]
<label class="el-form-item__label" style="width: 6em;">提示</label>
原數組不變
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
var newArr = [];
for(var i = 0; i < arr.length; i++){
newArr[i] = arr[i] * arr[i];
}
return newArr;<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
可以使用 map
<label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
```
var x = 10;
bar()
function bar(){
var x = 30;
function foo(){
console.log(x)
}
foo();
}
```
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
// 30
function foo() {
console.log(x)
}里面沒有x的賦值,向上找var x=30,所以是30.
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
- <label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
```
var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //輸出多少
```
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
// 2
function fn2(){
console.log(a)
}里沒有賦值,向上找,fn1里有var a=2,所以是2
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
- <label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
```
var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //輸出多少
```
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
//1
function fn2(){
console.log(a)
}里沒有賦值,向上找,全局變量里var a=1,所以是1
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
- <label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
```
var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //輸出多少
```
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
// undefined
function fn2(){
console.log(a)
}里面沒有,向上找,fn3里雖然有var a=4,對自身fn3沒有影響,但對內嵌函數有影響。
聲明的最終目的是為了提前使用,即在定義之前使用,如果不需要提前使用就沒有單獨聲明的必要,變量是如此,函數也是如此,所以聲明不會分配存儲空間,只有定義時才會分配存儲空間。函數是單向線,從上向下解析的。
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
- <label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
```
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
```
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
console.log(obj1 == obj2);
//false 因為obj1和obj2的指針所指向的在堆中的地址不一樣
console.log(obj1 = obj2);
// {a:1,b:2} 將obj2賦值給obj1
console.log(obj1 == obj2);
//由于obj2賦值給obj1,兩個對象所指向的在堆中的地址一致
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
- <label class="el-form-item__label" style="width: 6em;">題干</label>
如下代碼的輸出?為什么?
```
var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
```
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
```
1 //全局變量
[object Object] {
age: 3,
name: "jirengu"
} //全局對象,向上找是var c = { name: 'jirengu', age: 2 },而f2(c) ,函數執行 ++obj.age,所以 age: 3。
```
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
- <label class="el-form-item__label" style="width: 6em;">題干</label>
寫一篇關于作用域鏈的博客,不少于200字,附上博客鏈接
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
[http://www.lxweimin.com/p/22f4115d01e6](http://www.lxweimin.com/p/22f4115d01e6)
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
- <label class="el-form-item__label" style="width: 6em;">題干</label>
寫一個深拷貝函數。
<label class="el-form-item__label" style="width: 6em;">回答內容</label>
function deepCopy(oldObj) {
var newObj = {};
for(var key in oldObj) {
if(typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]);
}else{
newObj[key] = oldObj[key];
}
}
return newObj;
}
<label class="el-form-item__label" style="width: 6em;">打分</label>
<label class="el-form-item__label" style="width: 6em;">評語</label>
typeof null 也是 object
</form></j-panel-body>