面试题,关于就业考核,项目经验问答的个人猜题问答【诗书画唱】
前言:一份试卷,通常会4道vue题目,4道微信小程序题目,3道CSS样式题目,4道JS题目,一般我是优先确保面试题中vue题目,微信小程序,CSS样式题目,JS题目都能做对,其他概念之类的话,至少要能答出很多相关的,很多时候,答案就算和题目关系不大,但也可以答上,但关键的是,关键的答案至少要能答出来一些。当然,能全部答出来是最好的!括号里面的内容可以不答出来,但有些最好能答出来,有些单纯是我的个人注释。
有时会看自己的项目源码,结构,注释,专栏复习,巩固项目经验。看题仔细,少涂改,同时整齐,笔不要太粗。有时不要答得太急了,题目问什么,我看错了,漏看题目问的条件。
记得要回答完,我有时最后一题就是会,但没有回答完。同时项目经验一般会和路由跳转,界面跳转,微信小程序的父子传值有关。有时写得太急了,容易写错。
有时基础内容很久不接触,容易记混,但我认为不影响我做项目。

目录:
例子1:(5分) 请写出下方代码段的执行结果,并说明原因。(JS)
var s1 = "abc";
vars2=newString(s1);
s1.color = "blue";
s2.color = "red";
console.log( s1===s2, s1.color, s2.color)
例子2:(7分) 用JavaScript实现, 鼠标点击页面中的任意标签,alert该标签的名称。(JS)
例子3:面试题等等常考查内容(自创题):谈谈箭头函数的this指向和外部函数的this的关系
A:箭头函数内部的this和外部函数的this指向同一个对象 。
例子4:关于prosp属性的父子组件传值等方面的2道填空题目,默认选择下拉框,商品列表(和HBuilder中的reactjs中的ReactDOM等有关)
例子5:关于正则表达式和写出访问路径的题目
以下函数的功能是查询浏览器url中字符串参数,请补全代码(这题是面试题)
function parseQueryString(name) {
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regx = new RegExp(regexS);
var rs = regx.exec(_____________________________);
if(rs == null) {
return “”;
}else{
return ______________;
}
}
例子6:用JavaScript写一个函数,判断字符串是否是这样组
成的:第一个必须是字母,后面可以是字母、数字、下划线,
总长度为5-20。如果符合条件返回1,否则返回0。
函数原型: function checkString(str)
例子7:可能的面试题:JSON和JSONP有什么关系?
例子8:递归面试题中要补全的代码(含个人的详细解析和理解,递归方法)
例子9:用递归求斐波那契数的第n项(含个人的演算,其实递归就是传入参数有个依次变化的过程)
例子10:用递归实现求和与阶乘
例子11:(15分) 请定义一个函数repeat:(闭包)
function repeat ( func, nums, times ) {
// fill it
}
//函数repeat的调用方法:
var a = repeat( alert, 6,3000 ) ;

例子1:(5分) 请写出下方代码段的执行结果,并说明原因。(JS)
var s1 = "abc";
vars2=newString(s1);
s1.color = "blue";
s2.color = "red";
console.log( s1===s2, s1.color, s2.color)

例子1个人答案:false,undefined,red
个人对这题的想法:其实这题理解值类型和引用类型就很容易了:值类型就是赋值一次后就变成固定不可变值,不可重新赋值。引用类型就是可以可变值,可重新赋值。Java中String和js中的object是可以重新赋值的“引用类型”,但在js中string,number,boolean是不可以重新赋值的“值类型”。
如果对象是值类型,你给其添加.color或.name等等属性都是没有用的,控制台打印时,打印出来的是undefined
(可以将使用JSON.stringify(XXX)方法将数组或js对象转换成JSON字符串)
例子2:(7分) 用JavaScript实现, 鼠标点击页面中的任意标签,alert该标签的名称。(JS)

(个人对这题的想法:其实这题用事件冒泡做就很容易。)


例子2个人答案:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
//写在onload方法中的js代码在html代码执行完成以后再执行
window.onload = function(){
document.querySelector('body').onclick = function(e){
alert(e.target.tagName);
}
}
</script>
</head>
<body>
<input type="button" value="诗书画唱" />
<div>诗书画唱</div>
<p>诗书画唱</p>
</body>
</html>


例子3:面试题等等常考查内容(自创题):谈谈箭头函数的this指向和外部函数的this的关系
A:箭头函数内部的this和外部函数的this指向同一个对象 。
例子4:关于prosp属性的父子组件传值等方面的2道填空题目,默认选择下拉框,商品列表(和HBuilder中的reactjs中的ReactDOM等有关)

A1:
selected={this.props.selected}
cityArr.map(o =>(
<MyOption key={o.id}
cname={o.name} cid={o.id} selected={o.name=='湘潭'?'selected':''}/> ) );
(<select >{cityItems}</select>)

A2:
<table border="1px">{proData.rows.map(o => (< MyTr key={o.pname}
pname={o.pname} price={o.price} src={o.src} /> ))}</table>

例子5:关于正则表达式和写出访问路径的题目
以下函数的功能是查询浏览器url中字符串参数,请补全代码(这题是面试题)
function parseQueryString(name) {
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regx = new RegExp(regexS);
var rs = regx.exec(_____________________________);
if(rs == null) {
return “”;
}else{
return ______________;
}
}
A:
'http://localhost:8888/demo?act=admin&pwd=mypwd'
rs[1]


例子6:用JavaScript写一个函数,判断字符串是否是这样组
成的:第一个必须是字母,后面可以是字母、数字、下划线,
总长度为5-20。如果符合条件返回1,否则返回0。
函数原型: function checkString(str)

\w{4,19}$表示4到19长度的以字母下划线为结尾。代码写得越简短越好,不用$就表示不一定是\w结尾
A:
function checkString(str){
return /^[a-zA-Z]\w{4,19}$/.test(str) ? 1 : 0;
}
例子7:可能的面试题:JSON和JSONP有什么关系?
JSON:JS对象表示法,一种数据传输的格式要求
XML:可扩展标记语言,一种数据传输的格式要求
例子8:递归面试题中要补全的代码(含个人的详细解析和理解,递归方法)
//递归面试题 START
function getValue(obj,props){
//面试题中要补全的代码:
if(props.length-1==0){return obj[props[0]];}
else{
return getValue(obj[props[0]],props.slice(1))}
/*个人解析:
['a','p','name']就是props
props.length-1==0表示props为['a']这个长度为1的情况
obj依次会变成
{
a: {
p: {
name: 'Tom'
}
}
};
变成
a: {
p: {
name: 'Tom'
}
}
};
变成
p: {
name: 'Tom'
}
props依次变为
['a','p','name']
变为
[''p','name']
变为
['name']
最终
if(props.length-1==0){return obj[props[0]];}中
obj[props[0]]变为
p: {
name: 'Tom'
}[ ['name'][0]]
else中最终表达式执行的最终结果
包括if或包括else if中写自己要定义的函数的格式的常量可知值表达式就可以
该题中的getValue(obj[props[0]],props.slice(1))是最终的表达式。
执行最终的表达式,使用(被)赋值法,obj被赋值为obj[props[0]],
"props"(这里我把双引号中的内容表示为会被赋值的可变部分
双引号在这里仅仅是我的标记,方便读者等等看懂我的意思)被赋值为props.slice(1),
最终 if("props".length-1==0)
中"props".length-1的值会为0,return obj[props[0]];这个初始项。
赋值法是我常用于各种方面,比如理解,
运用一些东西的方法,这里的"值"可以代表很多东西。
*/
}
var o = {
a: {
p: {
name: 'Tom'
}
}
};
var v = getValue(o,['a','p','name']);
console.log(v);//Tom
/*
slice() 方法可从已有的数组中返回选定的元素。
个人总结语法:
arrayObject.slice(start,end)或arrayObject.slice(start)
arrayObject.slice(start):第start到最后一个的数组中的对象的值
arrayObject.slice(start,end):第start到第end-1个的数组中的对象的值
slice:切
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr.slice(1) + "<br />")的结果是John,Thomas
*/
//递归面试题 END
例子9:用递归求斐波那契数的第n项(含个人的演算,其实递归就是传入参数有个依次变化的过程)
//0,1,1,2,3,5
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<script>
function f(n){
if(n==1){return 0;}
if(n==2){return 1;}
else{
return f(n-1)+f(n-2);
}
}
console.log(f(5))//打印出第n个斐波那契数列的项,这里为3
//0,1,1,2,3
</script>
<body>
</body>
</html>
个人解析演算:
console.log(f(5))的内容会依次变成
f(4)+f(3);
变成
f(3)+f(2)+ f(2)+f(1);变成 f(2)+f(1)+f(2)+ f(2)+f(1)=1+0+1+1+0=3
例子10:用递归实现求和与阶乘
//和:
function sum(n){
if(n==1){return 1;}
else{
return sum(n-1)+n;
}
}
console.log(sum(5))
// 阶乘:
function jc(n){
if(n==1){return 1;}
else{
return jc(n-1)*n;
}
}
console.log(jc(5))
例子11:(15分) 请定义一个函数repeat:(闭包)
function repeat ( func, nums, times ) {
// fill it
}
//函数repeat的调用方法:
var a = repeat( alert, 6,3000 ) ;
A:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
//func:需要运行的函数
//nums:func函数运行的次数
//times:每次func函数运行的间隔时间(毫秒为单位)
function repeat(func,nums,times){
return function(str){
var iv = setInterval(function(){
func(str);
if(--nums == 0) {
clearInterval(iv);
}
},times);
}
}
var a = repeat(alert,6,2000);
a('你好');
</script>
</head>
<body>
</body>
</html>