到函数,对象还没改

This commit is contained in:
asd
2021-06-26 23:41:49 +08:00
parent 8a92cd47e2
commit 3fd521b54b
9 changed files with 1193 additions and 0 deletions

229
js1/1.基础.md Normal file
View File

@@ -0,0 +1,229 @@
# 基础
1. 写出js的组成
2. 写出js三种引入方式 并举例
3. 列举几种js 交互方式
4. 说明常量和变量的区别
5. js中用什么定义变量和常量 声明两个变量和一个常量
6. 如何交换两个变量的值
7. 变量命名规则
8. js中的数据类型有几种 分别包括
9. 检测数据类型的方式 分别说明优缺点
10. typeof 检测数据类型的返回值都有什么
11. 列举几种js交互方式
12.从弹框中输入一个字符 点击确定从控制台打印用户输入的值
13. 基本数据类型和引用数据类型的区别
14. js 注释有几种写法
15.下面代码的执行结果为
```angular2html
var a = "abcde";
var b = "千古壹号";
var c = "123123";
var d = '哈哈哈哈哈';
var e = "";
var f = haha;
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
```
16. 列举js中的转义字符
17. 分别取15题中的字符串的长度
18. 把15题中的6个字符串拼接成一个
19.下面代码的执行结果为
```angular2html
var str1 = '千古壹号' + '永不止步';
var str2 = '千古壹号' + 666;
var str3 = '千古壹号' + true;
var str4 = '千古壹号' + null;
var str5 = '千古壹号' + undefined;
var obj = { name: '千古壹号', age: 28 };
var str6 = '千古壹号' + obj;
```
20.下面代码的执行结果为
```angular2html
var a = true;
console.log(typeof a);
```
21. 下面代码的执行结果为
```angular2html
var a = 100;
console.log(typeof a);
var b = 12.3;
console.log(typeof a);
```
22. 下面代码的执行结果为
```angular2html
console.log("abc" / 18);
console.log("abc" * "abcd");
```
23. 下面代码的执行结果为
```angular2html
console.log("我" + "爱" + "你");
console.log("我+爱+你");
console.log(1+2+3);
```
```angular2html
var a = "1";
var b = 2;
console.log(a + b);
```
```angular2html
var a = 1;
var b = 2;
console.log("a" + b);
```
24.下面代码的执行结果为
```angular2html
var a = "4" + 3 - 6;
console.log(a);
```
25. 下面代码的执行结果为 并解释原因
```angular2html
var a = 0.1 + 0.2;
console.log(a);
```
26. 下面代码的执行结果为
```angular2html
var a = 1;
var b = 2;
var c = 3;
a = b + c;
b = c - a;
c = a * b;
console.log(a);
console.log(b);
console.log(c);
```
27. 下面代码的执行结果为
```angular2html
var a = "3";
var b = 2;
console.log(a-b);
```
28. 下面代码的执行结果为
```angular2html
var myObj = null;
cosole.log(typeof myObj);
```
29. 下面代码的执行结果为
```angular2html
let name;
console.log(name);
console.log(typeof name);
```
30.下面代码的执行结果为
```angular2html
console.log(typeof a); // undefined
console.log(a);
```
31.列举几种隐式类型转换和显式类型转换
32.列举几种其他类型转成字符串的方式
33. 列举几种转成数值的方式(分为整型和浮点型)
34.下面代码的执行结果为
```angular2html
console.log(parseInt("2017在公众号上写了6篇文章"));
console.log(parseInt("2017.01在公众号上写了6篇文章"));
console.log(parseInt("aaa2017.01在公众号上写了6篇文章"))
```
35. 下面代码的执行结果为
```angular2html
var a = 168.23;
console.log(parseInt(a));
var b = true;
console.log(parseInt(b));
var c = null;
console.log(parseInt(c));
var d = undefined;
console.log(parseInt(d));
```
36. 下面代码的执行结果为
```angular2html
var a = parseInt(5.8) + parseInt(4.7);
console.log(a);
```
```angular2html
var a = parseInt(5.8 + 4.7);
console.log(a);
```
```angular2html
var a = '123.456.789px';
console.log(parseFloat(a));
```
37.下面代码的执行结果为
```angular2html
const a = 1;
console.log(a == true);
console.log(typeof a);
console.log(0 == true)
```
38. 下面代码的执行结果为
```angular2html
const result1 = '';
const result2 = {a:'data1', b: 'data2'};
if (result1) {
console.log('因为 result1的内容为空所以代码进不了这里');
}
if (result2 && result2.a) {
// 接口返回了 result2且 result2.a 里面有值,前端才做进一步的事情
console.log('代码能进来,前端继续在这里干活儿');
}
```

27
js1/dom.md Normal file
View File

@@ -0,0 +1,27 @@
# dom
1. 点击按钮时,显示和隐藏盒子。
2. 鼠标悬停时,显示二维码大图
3. 点击按钮禁用文本框/解禁文本框
4. 文本框获取焦点/失去焦点(淘宝 京东的搜索框效果)
5. 用户注册信息错误时,输入框失去焦点后,高亮显示。
6. 全选和反选(仿京东购物车)
7. 电子时钟 (时间会更新)
![img](https://images2018.cnblogs.com/blog/1413464/201806/1413464-20180623141505286-330103200.png)
8. 随机点名 通过math.radom取随机数实现随机点名 名字集合放在数组里
![img](https://images2018.cnblogs.com/blog/1413464/201806/1413464-20180623141252328-1912615846.png)
a
11. 仿写 todolist的备忘录功能 实现要做项的增删改查
12. 在html上写一个表格 包括姓名 年龄 性别 住址 职业 通过js 做信息的增删改查

114
js1/this.md Normal file
View File

@@ -0,0 +1,114 @@
# this
1. 总结this的指向的规律
2. 改变this指向的方式
3. 下面代码的执行结果为
```js
function fn2(){
console.log(this.n)
var n='n'
this.n=10
console.log(n)
}
var obj={fn2:fn2, n:1}
fn2()
obj.fn2()
console.log(obj.n, window.n)
```
4.下面代码的执行结果为
```js
function f(){console.log(this)}
var obj={
fn: (function(){
console.log(this.f)
// return this.f
})(),
f: function(){console.log(this)}
}
f()
obj.f()
```
5. 下面代码的执行结果为
```js
var n = 10
var obj1={
n:1,
f:function(){this.n++; n=this.n++}
}
obj1.f()
console.log(n)
console.log(obj1.n)
window.setTimeout(obj1.f, 1000)
```
6. 下面代码的执行结果为
```js
console.log(getA)
if('a' in window){
var a = ''
function getA(a){
a = a||this.a
console.log(this.a)
}
getA(a)
}
```
7. 下面代码执行结果为
```js
const obj1 = {
nickName: 'qianguyihao',
age: 28,
};
function fn1() {
console.log(this);
console.log(this.nickName);
}
fn1.call(this);
```
8. 下面代码的执行结果为
```js
var obj1 = {
nickName: 'qianguyihao',
age: 28,
};
function fn1(a, b) {
console.log(this);
console.log(this.nickName);
console.log(a + b);
}
fn1.call(obj1, 2, 4);
```
9.下面代码的执行结果为
```js
function Father(myName, myAge) {
this.name = myName;
this.age = myAge;
}
function Son(myName, myAge) {
Father.call(this, myName, myAge);
}
const son1 = new Son('hello', 28);
console.log(JSON.stringify(son1));
```
10.把上面7,8,9 改成apply语法
13.把上面7,8,9 改成bind语法

259
js1/函数.md Normal file
View File

@@ -0,0 +1,259 @@
# 函数
* 简介函数语法
* 函数包含哪几部分
* 简述函数返回值规则
* 下面代码的执行结果为
```
var x = myFunction(7, 8);
function myFunction(a, b) {
return a * b;
}
```
* 简单介绍局部变量和全局变量
* 下面两段代码的执行结果分别是什么 并说明原因
```
function myFunction() {
var carName = "Volvo";
}
console.log(carName)
```
```
function myFunction() {
var carName = "Volvo";
console.log(carName)
}
```
* 函数如何返回值,如何接收
* 下面代码执行结果是什么 为什么
```
function sum(iNum1, iNum2) {
return iNum1 + iNum2;
}
```
* 下面代码执行结果是什么 为什么
```
function sum(iNum1, iNum2) {
console.log(iNum1 + iNum2);
}
```
* 下面代码执行结果是什么 为什么
```
function sum(iNum1, iNum2) {
console.log(iNum1 + iNum2);
}
sum()
```
* 下面代码执行结果是什么 为什么
```
function sum(iNum1, iNum2) {
return iNum1 + iNum2;
}
var iResult = sum(1,1);
alert(iResult);
```
* 下面代码执行结果是什么 为什么
```
function sum(iNum1, iNum2) {
return iNum1 + iNum2;
alert(iNum1 + iNum2);
}
```
* 下面代码的执行结果为
```
function sayHi(sMessage) {
if (sMessage == "bye") {
return;
}
alert(sMessage);
}
```
* 如何检测参数的个数
* 下面代码的执行结果是多少
```
function howManyArgs() {
alert(arguments.length);
}
howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);
```
* 下面代码的执行结果
```
function sayHi() {
if (arguments[0] == "bye") {
return;
}
alert(arguments[0]);
}
```
* 下面代码的执行结果是什么
```
function howManyArgs() {
alert(arguments.length);
}
howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);
```
* 什么是函数重载
* 下面代码的执行结果是什么
```
function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 5);
} else if(arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
doAdd(10);
doAdd(40, 20);
```
* 通过new function() 的系形式重新定义下面的对象
```
function sayHi(sName, sMessage) {
alert("Hello " + sName + sMessage);
}
```
* 编写一个函数,计算三个数字的大小,按从小到大顺序输出
* 用*实现等边三角形
* 创建函数的几种方式
* 下面代码的执行结果为
```js
sum(3,4);
sum("3",4);
sum("Hello","World");
// 定义函数:求和
function sum(a, b) {
console.log(a + b);
}
```
* 下面代码的执行结果为
```js
function sum(a, b) {
console.log(a + b);
}
sum(1, 2);
sum(1, 2, 3);
sum(1);
```
* 下面代码的执行结果为
```js
console.log(fn) == console.log(function fn(){alert(1)});
//定义fn方法
function fn(){
alert(1)
};
```
* fn 和 fn()的区别
* 下面代码的执行结果为
```js
(function(a, b) {
console.log("a = " + a);
console.log("b = " + b);
})(123, 456);
```
* 下面代码的执行结果为
```js
function foo() {
console.log(arguments);
console.log(typeof arguments);
}
foo();
```
* 如何返回函数传入的参数个数
* 下面代码的执行结果为
```js
fn(2, 4);
fn(2, 4, 6);
fn(2, 4, 6, 8);
function fn(a, b) {
console.log(arguments);
console.log(fn.length);
console.log(arguments.length);
console.log('----------------');
}
```
* 下面代码的执行结果为
```js
function fun() {
console.log(arguments.callee == fun); //打印结果为true
}
fun('hello');
```
* 下面代码的执行结果为
```js
fn(2, 4);
fn(2, 4, 6);
fn(2, 4, 6, 8);
function fn(a, b) {
arguments[0] = 99; //将实参的第一个数改为99
arguments.push(8); //此方法不通过,因为无法增加元素
}
```
* 介绍arguments的使用
* 编写一个函数来验证输入的字符串是否是有效的 IPv4 地址。
如果是有效的 IPv4 地址,返回 "IPv4"
如果不是上述类型的 IP 地址,返回 "Neither" 。
IPv4 地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0 - 255 用(".")分割。比如172.16.254.1

95
js1/对象.md Normal file
View File

@@ -0,0 +1,95 @@
# 对象练习
* 什么是面向对象 什么是面向过程
* 分别介绍对象的三大特征
* 对象也是一个变量,但对象可以包含多个值(多个变量),每个值以 对呈现。
* 定义一个对象 包含下列属性 name age sex addr(居住地) job(职业)
包含下列方法
eat, sleep, playgame, watchtv ,read
函数体内自定义内容 不可为空
* 给上面的题里的对象添加 height(身高) weight(体重) 属性并赋值
* 给上面题里的对象添加 下列方法
meituan(点外卖 参数需要传手机号和居住地址 想吃的东西 返回下单成功)
cook(做饭 需要传入时间 判断当前是哪一顿饭)
travel(需要传入目的地 返回我去哪里玩啦)
listenmusic(传入你喜欢的歌手 控制台打印最喜欢的曲子)
work传入上班时间和下班时间 判断是否为996
* 访问上面对象定义的以及添加后的所有属性(两种方式访问 先指明可以通过什么方式访问)
格式为 如name字段: 姓名:+name的属性值
通过调用不同的方法来制定行程(按照正常顺序调用上面对象的每一个方法)
* 探索对象创建的其他方式 每种都举例尝试(不得少于三个方法 五个属性)
* 探索遍历函数的所有属性
* 五大主流浏览器的名字为键 内核为值 创建一个对象
* 下面代码的执行结果是:
```
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
return [this.firstname,this.lastname,this.age,this.eyecolor,this]
}
var myFather=new person("John","Doe",50,"blue");
var myMother=person("Sally","Rally",48,"green");
console.log(myFather)
console.log(myMother)
```
* 下面代码的执行结果是什么 为什么
```
const user = {
name: "John"
};
user.name = "Pete";
alert(user.name);
```
* 如何访问下面对象的bird属性
对象为:
var user={
fire:"fox",
likes:{
type:"animal",
bird:"fly"
}
}
给user对象添加一个属性名是name 值是user
给user对象添加一个方法 触发后可以删除user对象的likes里面的type
创建一个对象 属性值为用户输入的自定义字符(最少三个属性)
* 创建一个对象 包含如下内容
* code 值为200
* msg 值为"请求成功"
* data 值为数组[]
* data中包含如下内容
* shopname 商品名
* pic 商品图片
* desc 商品简介
* price 商品价格
* kucun 库存
* xiaoliang 销量
* caozuo 操作
注 写的时候把值赋上
* 把上面那个题目用构造函数的重新写一份并生成4个内容不同的对象
* 创建一个对象 包含如下内容
* store 商店名称
* addr 商店地址
* sale: 方法 输出xxx商店正在大甩卖
* 遍历上面的两个对象 并输出每个的键和值
* 从外面给商店的对象增添一个shoplist的属性 该属性是一个数组 包含英雄名称跟英雄价格 货币单位以金币计算5个王者英雄就ok
* 把第一题中的data中的对象里面的caozuo 属性删除

44
js1/语句.md Normal file
View File

@@ -0,0 +1,44 @@
# 语句
1. 流程控制语句包括哪些
2. 根据要求实现功能
根据BMI身体质量指数显示一个人的体型。
BMI指数就是体重、身高的一个计算公式。公式是
BMI =体重÷身高的平方
比如老师的体重是81.6公斤身高是1.71米。
那么老师的BMI就是 81.6 ÷ 1.712 等于 27.906022365856163
过轻低于18.5
正常18.5-24.99999999
过重25-27.9999999
肥胖28-32
非常肥胖, 高于32
用JavaScript开发一个程序让用户先输入自己的体重然后输入自己的身高弹出两次prompt框
计算它的BMI根据上表弹出用户的身体情况。比如“过轻” 、 “正常” 、“过重” 、 “肥胖” 、“非常肥胖”。
3.一个加油站为了鼓励车主多加油,所以加的多有优惠。
92号汽油每升6元如果大于等于20升那么每升5.9
97号汽油每升7元如果大于等于30升那么每升6.95
编写JS程序用户输入自己的汽油编号然后输入自己加多少升弹出价格。
4. 通过switch判断今天是周几
5. 把第2题通过switch改写
6. 把第3题通过switch改写
7. 通过if 和switch 分别实现 判断今天是否该上班 上班输出work 休息输出relax
8. 通过while实现 输出1~100的和
9. 第八题通过for实现
10. 打印1~10 for,while
11. 写一个死循环
12. 第10题通过 do while结构写
13.while和do whil的区别
14.假如投资的年利率为 5%,试求从 1000 块增长到 5000 块,需要花费多少年?
15.break和continue的区别
16.99 乘法表
17.打印 1~100 之间的所有质数
18.判断闰年
19.在弹框中输入你的工资大于等于20000显示高工资8000-20000显示中高工资小于8000显示普通工资
20.如果时间小于 10:00则生成问候 "Good morning",如果时间大于 10:00 小于 20:00则生成问候 "Good day",否则生成问候 "Good evening":、
21.用*实现等边三角形

220
js1/运算符.md Normal file
View File

@@ -0,0 +1,220 @@
# 运算符
1.下面代码的执行结果为
```js
var a = "666";
a++;
console.log(typeof a);
console.log(a);
```
2.下面代码的执行结果为
```js
var a = '666';
var b = +a;
console.log(typeof a);
console.log(a);
console.log(typeof b);
console.log(b);
```
3. 加号有几种用法
4. 下面代码的result变量结果分别是什么
```js
result1 = true + 1;
result2 = true + false;
result3 = 1 + null;
result4 = 100 - '1'
```
5.运算符的优先级
6.假设用户输入345怎么分别得到3、4、5这三个数呢
7.算数运算符的运算规则
8.下面代码的执行结果为
```js
var n1 = 10;
var n2 = 20;
var result1 = n1++;
console.log(n1);
console.log(result1)
result = ++n1;
console.log(n1);
console.log(result);
var result2 = n2--;
console.log(n2);
console.log(result2);
result2 = --n2;
console.log(n2);
console.log(result2);
```
9.下面的代码的执行结果为
```js
console.log(3 < 2 && 2 < 4);
```
10.下面代码的执行结果为
```js
const a = prompt('请输入您的年龄');
if (a >= 18 && a < 65) {
alert('可以上班');
} else {
alert('准备退休');
}
```
11.说明逻辑运算符的用法
12.下面代码的执行结果为
```js
const a1 = 'qianguyihao';
a1 && alert('看 a1 出不出来');
const a2 = undefined;
a2 && alert('看 a2 出不出来');
```
13.说明短路运算符的用法
14.下面代码的执行结果为
```js
console.log(1 > true);
console.log(1 >= true);
console.log(1 > "0");
console.log(10 <= "hello");
console.log(true > false);
console.log("56" > "123");
```
15.下面代码的执行结果为
```js
console.log("我爱你中国" == "我爱你中国");
console.log("6" == 6);
console.log(true == "1");
console.log(0 == -0);
console.log(null == 0);
console.log(undefined == null);
console.log(NaN == NaN);
console.log(NaN === NaN);
console.log(NaN == null )
console.log(NaN == undefined)
```
16. 下面代码的执行结果为
```js
var b;
console.log(isNaN(b));
```
17. 下面代码的执行结果为
```js
console.log("6" === 6); //false
console.log(6 === 6);
```
18.下面代码的执行结果为
```js
console.log(3 != 8); //true
console.log(3 != "3"); //false因为3=="3"是true所以反过来就是false。
console.log(3 !== "3");
```
19.三目运算符的执行流程
20.下面代码执行结果为
```js
txt1="What a very";
txt2="nice day";
txt3=txt1+txt2;
console.log(txt3)
```
21.下面代码执行后 x,y,z 的值为
```js
x=5+5;
y="5"+5;
z="Hello"+5;
```
22.下面代码执行后 voteable的值为
```js
voteable=(age<18)?"年龄太小":"年龄已达到";
```
23.写一个完成计算器功能的函数,传入两个数 输出计算结果 具体计算功能包含 加减乘除成方取余 每个计算方式分别放按钮 点击输出计算结果
24.判断是否为两位数
25. 已知 x=5 分别写出下列语句的打印结果
x == 8
x == 5
x == "5"
x === 5
x === "5"
x != 8
x !== 5
x !== "5"
x !== 8
x > 8
x < 8
x >= 8
x <= 8
26.已知现有fish="23"
var cat = (fish < 18) ? "再来一筐锦鲤":"吃饱啦";
最后的cat 打印结果为
27.写出下面的打印结果
2 < 12
2 < "12"
2 < "John"
2 > "John"
2 == "John"
"2" < "12"
"2" > "12"
"2" == "12"
28.写出下面的打印结果
```js
alert( 5 % 2 );
alert( 8 % 3 );
alert( 2 ** 2 );
alert( 2 ** 3 );
alert( 2 ** 4 );
alert( 4 ** (1/2) );
alert( 8 ** (1/3) );
alert( '1' + 2 );
alert( 2 + '1' );
alert(2 + 2 + '1' );
var x = 1;
alert( +x );
var y = -2;
alert( +y );
// 转化非数字
alert( +true );
alert( +"" );
var apples = "2";
var oranges = "3";
alert( apples + oranges );
alert( Number(apples) + Number(oranges) );
```
29.下面代码的打印结果为
```js
alert( true || true );
alert( false || true );
alert( true || false );
alert( false || false );
```

24
js1/递归.md Normal file
View File

@@ -0,0 +1,24 @@
# 递归
* 1+2+3+4+....+100(n)求和
* 输入一个正整数n输出n!的值。其中n!=123*…*n,即求阶乘
* 一共有n格每步可以走1格或者2格问一共有多少走法。
* 一只青蛙可以一次跳 1 级台阶或者一次跳 2 级台阶,例如:
跳上第 1 级台阶只有一种跳法:直接跳 1 级即可。 跳上第 2 级台阶有两种跳法:每次跳 1 级,跳两次;或者一次跳 2 级。 问要跳上第 n 级台阶有多少种跳法?
* 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币
输入描述:
输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。
输出描述:
输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。
比如输入10返回122

181
js1/闭包.md Normal file
View File

@@ -0,0 +1,181 @@
# 闭包
1. 什么是闭包
2. 简述闭包的作用
3. 下面代码的执行结果是什么 为什么
```
function fn1() {
var name = 'iceman';
function fn2() {
console.log(name);
}
fn2();
}
fn1();
```
4. 下面代码的执行结果是什么 为什么
```
function fn1() {
var name = 'iceman';
function fn2() {
console.log(name);
}
return fn2;
}
var fn3 = fn1();
fn3();
```
5. 下面代码的执行结果是什么 为什么
```
function fn1() {
var name = 'iceman';
function fn2() {
console.log(name);
}
fn3(fn2);
}
function fn3(fn) {
fn();
}
fn1();
```
6. 下面代码的执行结果是什么 为什么
```
function waitSomeTime(msg, time) {
setTimeout(function () {
console.log(msg)
}, time);
}
waitSomeTime('hello', 1000);
```
7. 下面代码的执行结果是什么 为什么
```
for (var i = 1; i <= 10; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
```
8. 怎么才能在第7题中输出 1-10
9. 下面代码的执行结果是什么 为什么
```
function module() {
var arr = [];
function add(val) {
if (typeof val == 'number') {
arr.push(val);
}
}
function get(index) {
if (index < arr.length) {
return arr[index]
} else {
return null;
}
}
return {
add: add,
get: get
}
}
var mod1 = module();
mod1.add(1);
mod1.add(2);
mod1.add('xxx');
console.log(mod1.get(2));
```
10. 下面代码的执行结果是什么 为什么
```
var a = 10
function foo(){
console.log(a)
}
function sum() {
var a = 20
foo()
}
sum()
```
11. 下面代码的执行结果是什么 为什么
```
var n = 10
function fn(){
var n =20
function f() {
n++;
console.log(n)
}
f()
return f
}
var x = fn()
x()
x()
console.log(n)
```
12. 简述闭包形成的原因
13. 下面代码的执行结果是什么 为什么
```
var a = 0
function foo(){
var b =14
function fo(){
console.log(a, b)
}
fo()
}
foo()
```
14. 下面代码的执行结果是什么 为什么
```
var n = 10
function fn(){
var n =20
function f() {
n++;
console.log(n)
}
return f
}
var x = fn()
x()
```
15. 下面代码的执行结果是什么 为什么
```
var a = '林一一'
function foo(){
var a = 'foo'
function fo(){
console.log(a)
}
return fo
}
function f(p){
var a = 'f'
p()
}
f(foo())
```
16.预编译的四个步骤
17.全局变量和局部变量