diff --git a/js1/1.基础.md b/js1/1.基础.md new file mode 100644 index 0000000..592d560 --- /dev/null +++ b/js1/1.基础.md @@ -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('代码能进来,前端继续在这里干活儿'); +} + +``` + + + + diff --git a/js1/dom.md b/js1/dom.md new file mode 100644 index 0000000..f6231b1 --- /dev/null +++ b/js1/dom.md @@ -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 做信息的增删改查 \ No newline at end of file diff --git a/js1/this.md b/js1/this.md new file mode 100644 index 0000000..6cbf8a9 --- /dev/null +++ b/js1/this.md @@ -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语法 diff --git a/js1/函数.md b/js1/函数.md new file mode 100644 index 0000000..ea9548f --- /dev/null +++ b/js1/函数.md @@ -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; diff --git a/js1/对象.md b/js1/对象.md new file mode 100644 index 0000000..086b12c --- /dev/null +++ b/js1/对象.md @@ -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 属性删除 diff --git a/js1/语句.md b/js1/语句.md new file mode 100644 index 0000000..75cec5e --- /dev/null +++ b/js1/语句.md @@ -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.用*实现等边三角形 \ No newline at end of file diff --git a/js1/运算符.md b/js1/运算符.md new file mode 100644 index 0000000..1895624 --- /dev/null +++ b/js1/运算符.md @@ -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 ); + +``` \ No newline at end of file diff --git a/js1/递归.md b/js1/递归.md new file mode 100644 index 0000000..b9ecf77 --- /dev/null +++ b/js1/递归.md @@ -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 \ No newline at end of file diff --git a/js1/闭包.md b/js1/闭包.md new file mode 100644 index 0000000..e944533 --- /dev/null +++ b/js1/闭包.md @@ -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.全局变量和局部变量