递归出题

This commit is contained in:
asd 2021-04-09 16:36:34 +08:00
parent 71190d870d
commit 812be57880
28 changed files with 1834 additions and 227 deletions

33
demos/html/list列表.md Normal file
View File

@ -0,0 +1,33 @@
# list 列表
* demo1
```
<ul type="disc">
<li>网站导航</li>
<li>商家入驻</li>
<li>客户服务</li>
<li>济南</li>
<li>请登录</li>
<li>注册有礼</li>
<li>我的订单</li>
<li>我的易购</li>
</ul>
```
* demo2
```
<ul>
<li>手机/运营商/智能数码</li>
<li>家用电器/帮客/房产</li>
<li>厨卫/生活家电/厨具</li>
<li>电脑办公/相机/电竞</li>
<li>家具/家装/家纺/灯具</li>
<li>食品/酒水/生鲜/特产</li>
<li>美妆/个护/清洁/宠物</li>
<li>箱包/钟表/珠宝/艺术</li>
</ul>
```

View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// let a=1;
// let b=2;
// let c=3
// let [a,b,c]=[1,2,3]
// 数组的解构
// 数组是有序的 所以按索引值匹配
// 匹配不到的话 变量值为undefined
let [a,[b],[c]]=[1,[2],[4]]
// 对象解构
// 对象是无序的 变量必须与属性同名,才能取到正确的值。
// 匹配不到的话 变量值为undefined
// 对象在解构赋值的时候 先找同名属性,再赋值给对应的变量 真正被赋值的是后面的变量
</script>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
console.log(a)
var a=9
function a(){}
// var num=2 //var 是js里面定义变量的关键字
// console.log(num)
// num=9
// console.log(num)
// const num1=2 // 常量是定义以后值不能改变的量 声明的话 用const关键字
// // 使用常量的时候,初始值不能为空 初始值为空的常量没有意义
// console.log(num1)
// num1=8
// console.log(num1)
// var和let 都是用来声明变量的
// var num=2
// var num=8
// console.log(num)
console.log(num,"llo")
let num=2
// let num=8
console.log(num)
// let 不能在同一个块级作用域中重复声明
for(var i=0;i<5;i++){
let num=8
console.log(num)
}
function f(){
let num=5
let name="a"
function g(){
let name="b"
console.log(name)
function c(){
// let name="c"
console.log(name)
}
c()
}
console.log(num)
console.log(name)
g()
}
f()
</script>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// console.log(arr[2])
var arr1=[1,2,3,4,2,1]
// console.log(arr1[2])
var arr=new Set([1,2,3,4,2,1])
arr.add("pplo")
var you=arr.has(2)
// console.log(you)
arr.delete(1)
// console.log(arr) //[1,2,3,4]
function clearall(){
arr.clear()
console.log(arr,"drop")
}
// set的遍历 因为set类型不能用 索引访问 而且他属于iterable类型 所有属于iterable类型的都能用for of遍历
// set遍历是可以用for of的
// for(let i of arr){
// console.log(i)
// }
// set和数组的区别
// 1. set数据结构会过滤掉重复的元素
// 2. set不能按照数组的索引值直接获取 数组能按照索引值获取值
// 3.数组的创建方式有很多种但是set数据结构的创建方式只有一种 这个创建方式就是 new Set
// console.log(arr.size)
let arrs=Array.from(arr)
// console.log(arrs)
// console.log(arrs[2])
// map : 它类似于对象也是键值对的集合但是“键”的范围不限于字符串各种类型的值包括对象都可以当作键。也就是说Object 结构提供了“字符串—值”的对应Map 结构提供了“值—值”的对应,
var map1=new Map()
var obj={name:"asd"}
map1.set(obj,"这是值")
console.log(map1)
</script>
</head>
<body>
<button onclick="clearall()">清空</button>
</body>
</html>

View File

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<div>
用户名<input type="text" value="" id="account">
</div>
<div>
密码 <input type="password" value="" id="pwd">
</div>
<button onclick="login()">登录</button>
<div>
<table>
<tr id="userlist">
<th>用户编号</th>
<th>用户名</th>
<th>用户账号</th>
<th>用户密码</th>
<th>邮箱</th>
</tr>
</table>
</div>
<script>
$.ajax({
url:"http://127.0.0.1:5000/userlist",
success:function(res){
// console.log(res)
var ulist=JSON.parse(res)
console.log(ulist)
for(let i=0;i<ulist["data"].length;i++){
$("table").append("<tr><td>"+ulist["data"][i].userid+"</td> <td>"+ulist["data"][i].username+"</td> <td>asd</td> <td>123</td><td>a@</td></tr>")
}
}
})
function login(){
console.log("aaaaaa")
var data={account:$("#account").val(),pwd:$("#pwd").val()}
$.ajax({
url:"http://127.0.0.1:5000/login",
type:"post",
data:data,
dataType:"json",
success:function(res){
console.log(res)
}
})
}
</script>
</body>
</html>

View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function f1() {
var n = 999;
// console.log(n)
function f11() {
console.log(n)
}
// f11()
return f11
}
var f2 = f1(); // =>f11
f2()
// 函数在没有return 语句或者是return 后面为空的时候, 函数的返回值等于undefined
// 如果return 后面不为空的话 那么函数的返回值 即等于 return后面的东西
// console.log(f2)
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
var that = this;
return function () {
return that.name;
};
}
};
alert(object.getNameFunc()());
var func=object.getNameFunc()
func()
</script>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var obj={
name:"张三",
nickname:"法外之鱼"
}
var jsonobj={
"name":"a",
"nickname":"b"
}
// JSON.stringfy() 把对象转成json
// JSON.parse() 把json转成对象
</script>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function jiecheng(n){
if(n==1){
return 1
}else{
console.log(arguments.callee)
return n*arguments.callee(n-1)
// 5*5-1 5*4
// 5*4*3
// 5*4*3*2
// 5*4*3*2*1
}
}
// 5*4*3*2*1
// function jc(n){
// if(n==1){
// return 1
// }else{
// return n*a(n-1)
// // 5*5-1 5*4
// // 5*4*3
// // 5*4*3*2
// // 5*4*3*2*1
// }
// }
var jc=jiecheng
jiecheng=null
var sum=jc(5) //120
console.log(sum)
</script>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// 定时器 setinterval(多长时间后自动执行) settimeout延迟多久执行
// var time= setInterval(() => {
// var now= new Date()
// console.log(now)
// console.log(now.getFullYear()+'/'+parseInt(now.getMonth()+1)+'/'+now.getDate())
// // getmonth() 取到的值是当前月份的前一天
// // getday 周几
// console.log(now.getHours()+':'+now.getMinutes()+':'+now.getSeconds())
// }, 1000);
// function stop(){
// clearInterval(time)
// }
// function yanchi(){
// var yc=setTimeout(function(){
// alert("hello world")
// },3000)
// // clearTimeout(yc)
// }
// 日期时间
// var now= new Date()
// console.log(now)
// console.log(now.getFullYear()+'/'+parseInt(now.getMonth()+1)+'/'+now.getDate())
// // getmonth() 取到的值是当前月份的前一天
// // getday 周几
// console.log(now.getHours()+':'+now.getMinutes()+':'+now.getSeconds())
</script>
</head>
<body>
<button onclick="stop()">stop</button>
<button onclick="yanchi()">yanchi</button>
</body>
</html>

View File

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
// localstorage
localStorage.setItem("pwd","123") //添加
localStorage.setItem("id","90")
let pwd=localStorage.getItem("pwd") //获取
// localStorage.removeItem("id") //删除指定
localStorage.clear() //删除所有
console.log(pwd)
</script>
</head>
<body>
文本框<input type="text" value="" id="text"><br>
密码框<input type="password" value="" id="pwd"><br>
单选框<input type="radio" name="char" value="a">A<input type="radio" name="char" value="b">B<input type="radio" name="char" value="c">C<br>
复选框<input type="checkbox" value="1" checked>111<input type="checkbox" value="2" checked>222<input type="checkbox" value="3" checked>333 <br>
下拉列表<select name="" id="xia">
<option value="1">选项一</option>
<option value="2">选项二</option>
<option value="3">选项三</option>
</select>
<button id="sub">获取</button>
<p>aaaassxsxs</p>
<script>
$("#sub").click(function(){
var checkedarr=[]
// console.log($("#text").val())
// console.log($("#pwd").val())
// var dan=$("input[type='radio']:checked").val()
// console.log(dan)
var fu=$("input[type='checkbox']")
fu.each(function(){
console.log($(this).prop('checked'))
checkedarr.push($(this).prop('checked'))
})
console.log(checkedarr)
// var xia=$("#xia option:selected").val()
// console.log(xia)
// $("p").append("Some appended text.");
})
$.ajax({
url:"https://kaoshi-shangpin.theluyuan.com/findshop", //地址
success:function(res){
console.log(res)
} //接收返回值
})
</script>
</body>
</html>

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// 数格子有几种走法
// 已知 可以走一格或者走两格
</script>
</head>
<body>
</body>
</html>

26
zuoye/js/js/递归.md Normal file
View File

@ -0,0 +1,26 @@
# 递归
* 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

BIN
zuoye/js/js/递归.pdf Normal file

Binary file not shown.

59
考试/原题/daziji.html Normal file
View File

@ -0,0 +1,59 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// var str = "233333333333333333333"
// var strnew=""
// var i = 0
// var typer=setInterval(()=>{
// if(str[i]){
// document.write(str[i])
// i=i+1
// }
// },1000)
// if(i==str.length){
// clearInterval(typer)
// }
// document.write(str[i])
// 10
//
function mofa(n){
let str=""
if(typeof n=="number"){
if(n>0&&n<=10){
while(n>0){
if(n%2){
str="1"+str
n=(n-1)/2
}else{
str="2"+str
n=(n-2)/2
}
}
}else{
console.log("n必须小于10")
}
}else{
console.log("请输入数字")
}
return str
}
let mfb=mofa(10)
console.log(mfb)
</script>
</head>
<body>
</body>
</html>

View File

@ -1,227 +0,0 @@
# javascript 基础测试
## 单选题
1. javascript 代码需要放置在______标签之间
A.scripe
B.javascript
C.script
D.scripte
答案 A
解析 js代码需要放置在script标签之间才能被识别
2. script 标签可以被放置的位置是
A.<!doctype>文档声明之后就可以
B.boby标签内部
C.html标签结束之后
D.head标签内部
答案 D
解析 script标签可以放置在 head标签内或者是 body 标签内部
B选项是boby标签
3. 下面哪种javascript引入方式是错误的
A.在.html文件中的body标签中创建script 标签 在script 标签中写 js代码
B.在.js文件中写js代码 在.html通过 ``` <link src="js文件路径"> ```
C.在html 标签内执行js语句 如:``` <button onclick="alert()">save</button> ```
D.在.html文件内 在head标签中创建script 标签 在script 标签中写 js代码
答案 B
解析 link标签是用来引入外部css文件的
1. 下面两段代码js文件的加载顺序
demo1:
```
<script async src="js/vendor/jquery.js"></script>
<script async src="js/script2.js"></script>
<script async src="js/script3.js"></script>
```
demo2:
```
<script defer src="js/vendor/jquery.js"></script>
<script defer src="js/script2.js"></script>
<script defer src="js/script3.js"></script>
```
A.demo1的顺序为jquery.js, script2,script3
demo2的顺序为script2.js, script3.js, jquery
B.demo1的顺序为script2.js,script3.js,jquery.js
demo2的顺序为script3.js,script2.jsjquery.js
C.demo1的顺序为只执行script2
demo2的顺序是 jquery.js, script2.js, script3.js
D.demo1的顺序是script3.js,script2.js,jquery.js
demo2的执行顺序是script3.js script2.js jquery,js
答案C
解析 引入js时 script标签中加入async后js文件的执行顺序不确定 。但是 如果js代码报错就会造成阻塞 即后面的js代码不执行 所以 demo1 除了jquery.js, script2.js, script3.js 这个顺序之外 其他顺序会因为报错只执行第一个
引入script标签中加入 defer后js文件执行顺序确定为 文件引入的顺序
defer属性只支持外部引入的方式
2. 下面哪一种js注释添加方式是正确的
A. /
B.//
C.\
D.*
答案 B
js单行注释 符号是// js多行注释符号是 /* */
3. console.log()在chrome运行的结果会打印在哪里
A. 页面上
B.开发者工具中的sources中
C.开发者工具中的xhr中
D.开发者工具的console中
答案 D
解析 console.log 会打印在chrome浏览器的console板块中
4. 下面哪种JavaScript输出数据方式的表述是错的
A.使用 window.alert() 弹出带输入框的警告框。
B.使用 document.write() 方法将内容写到 HTML 文档中。
C.使用 innerHTML 写入到 HTML 元素。
D.使用 console.log() 写入到浏览器的控制台。
答案: A
解析 alert 弹出的警告框不包含 输入框
5. 下面哪个关键字能声明js变量
A.def
B.var
C.数据类型+变量名=变量值
D.变量不需要声明 直接写变量名就行
答案 B
6. 下面哪个不是js关键字
A.abstract
B.let
C.import
D.absolute
答案 D
解析 absolute是css的绝对定位
7. 下面哪个变量名符合要求
A.shop1
B.public
C.point&
D.12SY
答案 A
解析:
名称可包含字母、数字、下划线和美元符号
名称必须以字母开头
名称也可以 $ 和 _ 开头(但是在本教程中我们不会这么做)
名称对大小写敏感y 和 Y 是不同的变量)
保留字(比如 JavaScript 的关键词)无法用作变量名称
8. 阅读下面代码 选择运行结果
code :
```
var person = "Bill ";
var person1="Bill";
console.log(person,person1)
```
A. bill Bill
B. BillBill
C.BILLBILL
D. billbill
9. 将 "025.5" 的string类型变量转化为 number 类型后 值是
A.0255
B.255
C.25.5
D.5.5
10. 1 + 1aa 的运算结果是
A.11aa
B.2
C.2aa
D.1aa
11. 0 || 3 || 3 的返回结果是
A.0
B.3
C.true
D.1
12. 1 && 0 && 5 的返回结果是
A.0
B.1
C.true
D.5
## 填空题
1. 什么是字面量 常见的字面量有__ , __ , __ , __ , __ , __
答案字面量literal用于表达源代码中一个固定值的表示法notation
字符串自变量 整数字面量 浮点数字面量 布尔字面量 数组字面量 对象字面量
2. 运算符的优先级
3. js基本数据类型和引用数据类型的区别是__________
4. 外部引入js文件的优势是
5. 在html中 javascript语句是由 "执行"的"指令"
6. javascript语句由 构成
7. 分割javascript语句
8. 阅读下面代码 写出运行结果
code :
```
typeof "John"
typeof 3.14
typeof NaN
typeof false
typeof [1,2,3,4]
typeof {name:'John', age:34}
typeof new Date()
typeof function () {}
typeof myCar // (如果 myCar 没有声明)
typeof null
```
答案:
```
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
```

View File

@ -0,0 +1,469 @@
# javascript 基础测试
## 单选题
1. javascript 代码需要放置在______标签之间
A.scripe
B.javascript
C.script
D.scripte
答案 A
解析 js代码需要放置在script标签之间才能被识别
2. script 标签可以被放置的位置是
A.<!doctype>文档声明之后就可以
B.boby标签内部
C.html标签结束之后
D.head标签内部
答案 D
解析 script标签可以放置在 head标签内或者是 body 标签内部
B选项是boby标签
3. 下面哪种javascript引入方式是错误的
A.在.html文件中的body标签中创建script 标签 在script 标签中写 js代码
B.在.js文件中写js代码 在.html通过 ``` <link src="js文件路径"> ```
C.在html 标签内执行js语句 如:``` <button onclick="alert()">save</button> ```
D.在.html文件内 在head标签中创建script 标签 在script 标签中写 js代码
答案 B
解析 link标签是用来引入外部css文件的
1. 下面两段代码js文件的加载顺序
demo1:
```
<script async src="js/vendor/jquery.js"></script>
<script async src="js/script2.js"></script>
<script async src="js/script3.js"></script>
```
demo2:
```
<script defer src="js/vendor/jquery.js"></script>
<script defer src="js/script2.js"></script>
<script defer src="js/script3.js"></script>
```
A.demo1的顺序为jquery.js, script2,script3
demo2的顺序为script2.js, script3.js, jquery
B.demo1的顺序为script2.js,script3.js,jquery.js
demo2的顺序为script3.js,script2.jsjquery.js
C.demo1的顺序为只执行script2
demo2的顺序是 jquery.js, script2.js, script3.js
D.demo1的顺序是script3.js,script2.js,jquery.js
demo2的执行顺序是script3.js script2.js jquery,js
答案C
解析 引入js时 script标签中加入async后js文件的执行顺序不确定 。但是 如果js代码报错就会造成阻塞 即后面的js代码不执行 所以 demo1 除了jquery.js, script2.js, script3.js 这个顺序之外 其他顺序会因为报错只执行第一个
引入script标签中加入 defer后js文件执行顺序确定为 文件引入的顺序
defer属性只支持外部引入的方式
2. 下面哪一种js注释添加方式是正确的
A. /
B.//
C.\
D.*
答案 B
解析 js单行注释 符号是// js多行注释符号是 /* */
3. console.log()在chrome运行的结果会打印在哪里
A. 页面上
B.开发者工具中的sources中
C.开发者工具中的xhr中
D.开发者工具的console中
答案 D
解析 console.log 会打印在chrome浏览器的console板块中
4. 下面哪种JavaScript输出数据方式的表述是错的
A.使用 window.alert() 弹出带输入框的警告框。
B.使用 document.write() 方法将内容写到 HTML 文档中。
C.使用 innerHTML 写入到 HTML 元素。
D.使用 console.log() 写入到浏览器的控制台。
答案: A
解析 alert 弹出的警告框不包含 输入框
5. 下面哪个关键字能声明js变量
A.def
B.var
C.数据类型+变量名=变量值
D.变量不需要声明 直接写变量名就行
答案 B
6. 下面哪个不是js关键字
A.abstract
B.let
C.import
D.absolute
答案 D
解析 absolute是css的绝对定位
7. 下面哪个变量名符合要求
A.shop1
B.public
C.point&
D.12SY
答案 A
解析:
名称可包含字母、数字、下划线和美元符号
名称必须以字母开头
名称也可以 $ 和 _ 开头(但是在本教程中我们不会这么做)
名称对大小写敏感y 和 Y 是不同的变量)
保留字(比如 JavaScript 的关键词)无法用作变量名称
8. 阅读下面代码 选择运行结果
code :
```
var person = "bilibili ";
var person1="干杯!";
console.log(person,person1)
```
A. bilibili 干杯!
B. bilibili干杯!
C.bilibili,干杯
D.person,person1
答案 D
解析:person person1是变量会被解析中间的','只是分割 不会按,显示 字符串中的空格会被保留
9. 将 "025.5" 的string类型变量转化为 number 类型后 值是
A.0255
B.255
C.25.5
D.5.5
答案 D
解析 字符串转成数字 从第一个不是0的数字开始算
10. 1 + 1aa 的运算结果是
A.11aa
B.2
C.2aa
D.1aa
答案 A
解析 +操作的两边是字符串时 充当连接符的作用
11. 0 || 3 || 3 的返回结果是
A.0
B.3
C.true
D.1
答案 B
解析 || 运算符返回第一个不为0false的值
12. 1 && 0 && 5 的返回结果是
A.0
B.1
C.true
D.5
答案 B
解析 &&运算符 返回第一个为true(1)的值
<hr>
13. 下面代码进行了几步操作 分别是什么操作
code:
```
var x = 15;
```
A. 1 定义值为15的变量x
B. 2 定义一个变量x; 把15作为值赋给x
C. 3 var声明 名字是x; 值=15
D. 4 var声明 名字是x; 值= 15
答案 B
14. 读代码选结果
code:
```
var a=3
var b=0
var sum=a+b
console.log(sum)
console.log(sum+"")
console.log(a+b+"")
```
A.3,30,30
B.30,30,3O
C.3,3,30
D.30,30,30
答案 C
解析:在数字类型后面+"" 的时候,就把整个输出的内容变成了字符串类型 不做数字运算直接拼接 此时+做连接符
15. 读代码 选结果
code
```
var a=9
var b=1
console.log(--a)
console.log(a--)
conosle.log(b--)
```
A. 8,8,1
B.8,7,0
C.9,1,1
D.8,8,报错
答案 D
解析 --a 前置自减,先减再执行; a--后置自减 先执行再减
16. typeOf 10+''的结果是
A. String
B. Number
C. undefined
D.null
答案 B
解析 数字+字符串的时候 中间的+充当连接符的操作
17. var a=2 a>3&&a<5 的结果为
A. true
B.false
C.2
D.3
答案 B
18. 定义函数的关键字是
A.def
B.函数
C.function
D.func
答案 C
19. 下面定义的函数结构错误的是
A.function a(){}
B.var b=function(){}
C.()=>{}
D.functian a(){}
答案 D
<hr>
20. 读代码 选执行结果
code
```
add(a,b){
return a+b
}
add(1,2)
```
A. 3 B. 12 C.a+b D. 空,什么都不出
答案: D
解析: 函数add返回的值没有接收
21. 函数 function greet(){console.log("hello)} 的返回值是
A. hello B.空 什么也没有
C. undefined D. null
答案 C
22. 读代码 选执行结果
code
```
myfunc(x,y=1){
console.log(x*y)
}
myfunc(3)
```
A. 3 B.x*y c.NaN D. 报错
答案 A
23. 读代码 选执行结果
code
```
myfunc(x=1,y){
console.log(x*y)
}
myfunc( ,3)
```
A. 3 B.x*y c.NaN D. 报错
答案 D
解析 js在定义函数时需要把必传的参数写在前面
24. 读代码 选执行结果
```
function a(n) {
if (n <= 1) {
return 1
} else {
return n * a(n - 1)
}
}
console.log(a(5))
var cheng=a
a=null
console.log(cheng(5))
```
A. 报错 B.30 C. 60 D.120
答案 A
25. 读代码 选执行结果
```
function fn()
{
this.user = '追梦子';
var obj={user:"momo"}
return {};
}
var a = new fn;
console.log(a.user);
```
A. 追梦子 B. momo C.undefined D. 报错答案C
26. 读代码 选执行结果
```
function myFunction() {
var carName = "Volvo";
}
console.log(caName)
```
A.Volvo B.caName C.undefined D.报错
答案 D
## 填空题
1. 什么是字面量 常见的字面量有__ , __ , __ , __ , __ , __
答案字面量literal用于表达源代码中一个固定值的表示法notation
字符串自变量 整数字面量 浮点数字面量 布尔字面量 数组字面量 对象字面量
2. 运算符的优先级
答案 [],.,{}, ++,-- , *, /,%, +,-, <,<=,>,>= ==,!=,===,!==, && , ||, ?:,
=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>、>=、>>= ,
3. js基本数据类型和引用数据类型的区别是__________
答案 基本数据类型(存放在栈中)
基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问
引用数据类型(存放在堆内存中的对象,每个空间大小不一样,要根据情况进行特定的配置)
引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。
引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象
4. 外部引入js文件的优势是
答案1可维护性遍及不同HTML页面的javascript会造成维护问题但把所有js文件都放在一个文件夹中维护起来就轻松多了。而且开发人员因为也能够在不触及HTML标记的情况下集中精力编写js代码
2可缓存浏览器能够根据具体的设置缓存链接的所有外部js文件也就是说如果有2个页面都使用同一个文件那么这个文件只需下载一次。因此最终结果就是能够加快页面加载速度。
3适应未来通过外部文件包含js无需使用XHTML或hack注释。HTML和XHTML包含外部文件的语法是相同的。
5. 在html中 javascript语句是由 "执行"的"指令"
答案 浏览器
6. javascript语句由 构成
答案 ECMAScript BOM DOM
7. 分割javascript语句
答案 ;
8. 阅读下面代码 写出运行结果
code :
```
typeof "John"
typeof 3.14
typeof NaN
typeof false
typeof [1,2,3,4]
typeof {name:'John', age:34}
typeof new Date()
typeof function () {}
typeof myCar // (如果 myCar 没有声明)
typeof null
```
答案:
```
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
```
<hr>
9. ```25%6*(10-4) ```执行结果为:
10.读代码分析预编译过程
```
// 函数
function fn(a){
console.log(a);
var a = 123;
console.log(a);
function a(){};
console.log(a);
var b = function(){};
console.log(b);
function d(){};
}
fn(1);
```
# 简答题
* 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况返回参数 num
示例
输入15
输出fizzbuzz
* 编写一个函数来验证输入的字符串是否是有效的 IPv4 地址。
如果是有效的 IPv4 地址,返回 "IPv4"
如果不是上述类型的 IP 地址,返回 "Neither" 。
IPv4 地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0 - 255 用(".")分割。比如,
172.16.254.1
* 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,
但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需
要你帮他设计一个投入方案使他最后恰好拥有n个魔法币
输入描述:
输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。
输出描述:
输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。
比如输入10返回122

Binary file not shown.

View File

@ -0,0 +1,117 @@
# 函数相关的题目
## 选择
1. 下面哪个定义对象的方式是错误的
A.var obj={uname:"asd",pwd:"123",quanxian:[1,3,4,9,8]}
B.Object wings={order:2,price:80}
C.obj=new Object()
D.
```
function Creator(){
this.name="god"
}
const momo=new Creator()
```
答案 B
2. .已知 obj={code:200,msg:"操作成功",data:[{articleid:1,title:"关于我不是史莱姆那件事",reader:198},{articleid:2,title:"关于我不是史莱姆那件事",reader:19},{articleid:3,title:"qwer",reader:18},{articleid:4,title:"re0",reader:198},{articleid:5,title:"买个苹果",reader:23}]}
下面哪个访问title=re0的articleid的方式是正确的
A.obj.data(3)["articleid]
B.obj["data"].3.articleid
C.obj.data[3].articleid
D.obj[3].articleid
答案C
3.下面哪个关于对象的说法是错误的
A.JavaScript 对象是被命名值的容器。
B.值以名称:值对的方式来书写(名称和值由冒号分隔)。
C.所有汽车都拥有同样的属性,但属性值因车而异。
所有汽车都拥有相同的方法,但是方法会在不同时间被执行。
D.this 关键词指的是它所属的对象。它拥有不同的值,具体取决于定义它的位置:
答案 D
4. 在函数单独使用时, this 指的是
A. 他自身
B.他父级
C. Object
D.window
5. 下面代码中,严格模式下的 this的值为
```
"use strict";
function myFunction() {
return this;
}
```
A. window
B. Object
C. global
D. undefined
答案 D
6. 下面代码中的this 指向的是
```
<button onclick="this.style.display='none'">
点击来删除我!
</button>
```
A. 接收此事件的 HTML 元素
B. Object
C. global
D. window
答案 A
7. 下面的代码中运行的结果是
```
var person1 = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
var person2 = {
firstName:"Bill",
lastName: "Gates",
}
person1.fullName.call(person2);
```
A. Bill B.Gates C. Gates Bill D. Bill Gates
答案 D
8. 关于this的说法 错误的是
A.在对象方法中this 指的是此方法的“拥有者”。
B. 在浏览器窗口中,全局对象是 [object Window]
C. 在严格模式中,如果单独使用,那么 this 指的是全局对象 [object Window]
D. 只有apply,call能改变对象的this指向
答案 D
9. 下面哪一项不是严格模式不允许的
A. 删除变量(或对象)
B.删除函数
C.八进制数值文本
D. 转义字符
10. JavaScript 哪个属性允许您为对象构造器添加新属性:
A._proto_
B.prototype
C.proto
D.构造器.属性 直接添加

Binary file not shown.

View File

@ -0,0 +1,103 @@
# js 测试
## 选择题
1. 下面声明数组的方式错误的是
A. var arr=[]
B. var arr=new Array(7)
C.var arr=[{name:"asd",age:20"},{name:"asd",age:20"},{name:"asd",age:20"}]
D.var arr=[{name:"asd",age:20"},{name:"asd",age:20"},0]
答案 D
2. 下面哪个不是数组的方法
A.pop
B.shift
C.remove
D.push
答案C
3. 下面哪个遍历数组的方式是错的
A.
var arr = [1, 2, 3, 4, 5, 6]
for(var i = 0; i < arr.length; i++) {
console.log(arr[i])
}
B.
var arr = ['我', '是', '谁', '我', '在', '哪']
for(var key in arr) {
console.log(key)
}
C.
var arr = ['我', '是', '谁', '我', '在', '哪']
for(var key of arr) {
console.log(key)
}
D.
var arr = [1, 2, 3, 4, 5, 6]
var newArr = arr.map(function (item, idnex) {
return item * item
})
console.log(newArr)
## 填空题
1. 列举js事件类型至少五个
2. 检测NaN的数据类型结果为
3. 读代码写执行结果
```
function C1(name) {
if (name) {
this.name = name;
}
}
function C2(name) {
this.name = name;
}
function C3(name) {
this.name = name || 'join';
}
C1.prototype.name = 'Tom';
C2.prototype.name = 'Tom';
C3.prototype.name = 'Tom';
alert((new C1().name) + (new C2().name) + (new C3().name));
```
## 简答题
1. 写一个函数实现传入一个数组 实现冒泡排序
2. 数组去重(多种方法实现)
3. 写一个函数求传入数组的平均数
4.
在一个大学的编程选修课班里我们得到了一组参加该班级的学生数据分别是姓名、性别、年龄和年级接下来呢我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦。
学生信息如下:
('小A','女',21,'大一'), ('小B','男',23,'大三'),
('小C','男',24,'大四'), ('小D','女',21,'大一'),
('小E','女',22,'大四'), ('小F','男',21,'大一'),
('小G','女',22,'大二'), ('小H','女',20,'大三'),
('小I','女',20,'大一'), ('小J','男',20,'大三')

Binary file not shown.

View File

@ -0,0 +1,319 @@
# 递归
## 简答题
1. 九九乘法表
```
function num(nums){
if(nums==1){
console.log("1x1=1")
}else{
num(nums-1)
for(var i=1,str='';i<=nums;i++){
str += `${i}x${nums}=`+i*nums+' '
}
console.log(str)
}
}
num(9)
// 循环
for(var i=1;i<10;i++){
let str = ''
for(var j=1;j<10;j++){
if(i>=j){
str += `${j}x${i}=`+i*j+' '
}
}
console.log(str)
}
```
2. 定义一个函数 实现n的阶乘
```
function jc(n){
if(n<=1){
return 1;
}else{
return n*arguments.callee(n+1);
}
}
```
3. 一只青蛙可以一次跳 1 级台阶或者一次跳 2 级台阶,例如:
跳上第 1 级台阶只有一种跳法:直接跳 1 级即可。 跳上第 2 级台阶有两种跳法:每次跳 1 级,跳
两次;或者一次跳 2 级。 问要跳上第 n 级台阶有多少种跳法?
```
function ge(n){
if(n==0){
return 0;
}else if(n==1){
return 1;
}else if(n==2){
return 2;
}
return ge(n-1)+ge(n-2);
}
```
4. 编写一个函数输入n为偶数时调用函数求1/2+1/4+…+1/n,当输入n为奇数时调用函数求/1+1/3+…+1/n;
```
function num(nums){
if(nums==1){
console.log("1x1=1")
}else{
num(nums-1)
for(var i=1,str='';i<=nums;i++){
str += `${i}x${nums}=`+i*nums+' '
}
console.log(str)
}
}
num(9)
// 循环
for(var i=1;i<10;i++){
let str = ''
for(var j=1;j<10;j++){
if(i>=j){
str += `${j}x${i}=`+i*j+' '
}
}
console.log(str)
}
```
5. 1+2+3+4+....+100(n)求和
```
function dg(x){ //第一题
if(x==1)return 1;
return dg(x-1)+x;
}
var lj=dg(100);
console.log(lj)
```
6. 细胞分裂 有一个细胞 每一个小时分裂一次一次分裂一个子细胞第三个小时后会死亡。那么n个小时候有多少细胞
```
// 每三个小时为一个周期 第四个小时就 go die 了。
// 方法一
// 第一个小时只有a态细胞第二个小时a态细胞分裂原来的a态细胞变成了b态细胞分裂出来的细胞变成了新的a态细胞第三个小时a态细胞继续分裂变成b态细胞和新的a态细胞b态细胞分裂变成c态细胞和a态细胞第四个小时a、b、c态细胞都会分裂并且按照之前的规律转变。得出下面的结论
// a 初始态 一个小时 前一个小时的 a+b+c
// b 幼年态 两个小时 前一个小时的 a
// c 成熟态 三个小时 前一个小时的 b
function allCell(n){
// a态细胞
let aCell = function(n){
if(n==1){
return 1;
}else{
return aCell(n-1)+bCell(n-1)+cCell(n-1);
}
}
// b态细胞
let bCell = function(n){
if(n==1){
return 0;
}else{
return aCell(n-1);
}
}
// c态细胞
let cCell = function(n){
if(n==1||n==2){
return 0;
}else{
return bCell(n-1);
}
}
return aCell(n)+bCell(n)+cCell(n)
}
console.log(allCell(10))
// 方法二
// 这个方法就是分成了 活着的 和 死亡的
function cell(hour){
// 活着的细胞
function livecell(hour){
if(hour<4){
// 前三个小时没有死亡的细胞 成2的n-1次方增长
return Math.pow(2,hour-1)
}else{
// 从第四个小时开始有死亡的细胞
// 活着的细胞 = 前一个小时活着的细胞 - 这个小时死去的细胞
return livecell(hour-1)*2 - diecell(hour)
}
}
// 死亡的细胞
function diecell(hour){
if(hour<4){
// 前三个小时没有死亡的细胞
return 0
}else{
// 因为三个小时一个周期
// 也就是每三个小时,(n-3)时的细胞就会死完
// 那么 这个小时(n)死去的细胞 + 上个小时(n-1)死去的细胞 + 前两个小时(n-2)死去的细胞 = 前三个小时(n-3)活着的细胞
return livecell(hour-3) - diecell(hour-1) - diecell(hour-2)
}
}
return livecell(hour)
}
console.log(cell(10))
```
7. 有 64 个格子第一个格子放一粒麦子第二个放2粒第三个放4粒...每个格子都是前边的两倍。一共有多少粒?
```
let sum = 0
let start = 1;
let end = 0;
function tow(){
if(end>=64){
return false
}
sum+=start
start*=2
end++
tow()
}
tow()
console.log(sum)
```
8. 输出斐波那契数列
```
// 递归
let a = 0;
function tu(num){
a++
if(num==1||num==2){
return 1
}
let nums = tu(num-1)+tu(num-2)
return nums
}
console.log(tu(8),a)
// 闭包解决
// 也就是存在数组中,再次循环时,如果数组中已经存在,就返回数组中的值,大大减少了递归调用函数的次数
var count2=0;
var fiba = (function(){
var arr = [0,1,1]; //第0位只是占位从第一位开始算起
return function(n){
count2++;
var res=arr[n];
if(res){// 如果arr中存在返回这个值
console.log(res,'----')
return res;
}else{
console.log(arr[n],'+++++')
arr[n]=fiba(n-1)+fiba(n-2);
return arr[n];
}
}
})();
console.log(fiba(8),count2)
// 普通
// 普通循环解决这个问题是性能最好的。
let a = 1;
let b = 1
let c;
function tu(num){
for(let i=0;i<num-2;i++){
c = a+b;
a = b;
b = c
}
return c;
}
console.log(tu(8))
```
9.
10. 下面代码导致的问题如何解决
```
function factorial(num){
if (num <= 1){
return 1;
} else {
return num * factorial(num-1);
}
}
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4));
```
答案
我们知道arguments.callee 是一个指向正在执行的函数的指针,因此可以用它来实现对函数
的递归调用,例如:
```
function factorial(num){
if (num <= 1){
return 1;
} else {
return num * arguments.callee(num-1);
}
}
```
11. 猴子吃桃问题:猴子第一天摘下若干个桃子, 当即吃了一半,还不过瘾,又多吃了一个; 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
* 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时见只剩下一个桃子了。 求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
// 倒数第1 2 3 4 5 6 天
// 桃数量1 4 10 22 46 94
// 采用递归的方法
```
// 返回第n天的桃子数量
function getValue(n){
if (n == 1) {
return 1;
}
return (getValue(n - 1) + 1) * 2;
}
for (int i = 1; i < 11; i++) {
console.log("第" + i + "天\t" + getValue(i) + "颗");
}
```

Binary file not shown.

View File

@ -0,0 +1,167 @@
# js闭包
## 填空
1. 下面代码的执行结果为
答案 -1
```
function createComparisonFunction(propertyName) {
return function(object1, object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value1 < value2){
return -1;
} else if (value1 > value2){
return 1;
} else {
return 0;
}
};
}
let res=createComparisonFunction("num")({num:3,pri:8},{num:6,pri:12})
console.log(res)
2. 下面代码的执行结果为
答案 10 10
```
function createFunctions(){
var result = new Array();
for (var i=0; i < 10; i++){
result[i] = function(){
return i;
};
}
return result;
}
let res=createFunctions()
res[9]()
res[3]()
```
3. 下面代码的执行结果为
答案 9 3
```
function createFunctions(){
var result = new Array();
for (var i=0; i < 10; i++){
result[i] = function(num){
return function(){
console.log(num)
};
}(i);
}
return result;
}
var res=createFunctions()
console.log(res[9]())
console.log(res[3]())
```
4. 下面代码的执行结果为
答案为 The Window
```
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
```
5. 下面代码的执行结果为
答案为 My Object
```
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
```
6. 下面代码的执行结果为
答案 My Object My Object The Window
```
var name = "The Window";
var object = {
name : "My Object",
getName: function(){
return this.name;
}
};
object.getName(); //"My Object"
(object.getName)(); //"My Object"
(object.getName = object.getName)(); //"The Window"
```
解析
第一行代码跟平常一样调用了 object.getName(),返回的是"My Object",因为 this.name
就是 object.name。第二行代码在调用这个方法前先给它加上了括号。虽然加上括号之后就好像只
是在引用一个函数,但 this 的值得到了维持,因为 object.getName 和(object.getName)的定义
是相同的。第三行代码先执行了一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是
函数本身,所以 this 的值不能得到维持,结果就返回了"The Window
当然,你不大可能会像第二行和第三行代码一样调用这个方法。不过,这个例子有助于说明即使是
语法的细微变化,都有可能意外改变 this 的值。
7. 下面代码的执行结果为
答案 7 12
```
function makeAdder() {
return function(x) {
return x + y;
}
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
add5 = null;
add10 = null;
```
8. 下面代码的执行结果为
答案 /Hello Joe
```
function sayHello(name) {
var text = 'Hello ' + name;
var say = function() { console.log(text); }
say();
}
sayHello('Joe')
```
9. 闭包的定义
答案 闭包是指有权访问另一个函数作用域中的变量的函数
10. 闭包的作用
答案 1. 闭包可以访问到局部变量
2. 闭包可以保护里面的局部变量,使它们不会随着函数的结束而销毁

Binary file not shown.

View File

@ -0,0 +1,81 @@
13. 下面代码进行了几步操作 分别是什么操作
code:
```
var x = 15;
```
A. 1 定义值为15的变量x
B. 2 定义一个变量x; 把15作为值赋给x
C. 3 var声明 名字是x; 值=15
D. 4 var声明 名字是x; 值= 15
答案 B
14. 读代码选结果
code:
```
var a=3
var b=0
var sum=a+b
console.log(sum)
console.log(sum+"")
console.log(a+b+"")
```
A.3,30,30
B.30,30,3O
C.3,3,30
D.30,30,30
答案 C
15. 读代码 选结果
code
```
var a=9
var b=1
console.log(--a)
console.log(a--)
conosle.log(b--)
```
A. 8,8,1
B.8,7,0
C.9,1,1
D.8,8,报错
答案 D
16. typeOf 10+''的结果是
A. String
B. Number
C. undefined
D.null
答案 A
17. var a=2 a>3&&a<5 的结果为
A. true
B.false
C.2
D.3
答案 B
18. 定义函数的关键字是
A.def
B.函数
C.function
D.func
19. 下面定义的函数结构错误的是
A.function a(){}
B.var b=function(){}
C.()=>{}
D.functian a(){}
答案 D
9. ```25%6*(10-4) ```执行结果为:
10. var a=age<18?'不能进入':"欢迎光临" 的执行结果为
11. 读代码写执行结果
code
```
function ask(){
var question="你的名字是什么
}
console.log(question)
```