题干
立即执行函数表达式是什么?有什么作用?
回答内容
(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.jianshu.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.jianshu.com/p/22f4115d01e6](http://www.jianshu.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>
网友评论