1.ajax请求方式、参数类型、状态码?
请求方式:Get,Post
url: 要求为String类型的参数,发送请求的地址。
type: 要求为String类型的参数,请求方式(post或get)默认为get。
timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。
async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。
cache:要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false)。
data: 要求为Object或String类型的参数,发送到服务器的数据。
dataType: 要求为String类型的参数,预期服务器返回的数据类型。
xml:返回XML文档,可用JQuery处理。
html:返回纯文本HTML信息;
script:返回纯文本JavaScript代码。不会自动缓存结果。
json:返回JSON数据。
jsonp:JSONP格式。
text:返回纯文本字符串。
状态码
200 成功处理了请求,一般情况下都是返回此状态码;
400 服务器不理解请求的语法。
404 服务器找不到请求的网页。
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
2. Jquery常用的选择器?
1.1、ID选择器 #id
描述:根据给定的id匹配一个元素, 返回单个元素
示例:$("#test") 选取 id 为 test 的元素
1.2、类选择器 .class
描述:根据给定的类名匹配元素,返回元素集合
示例:$(".test") 选取所有class为test的元素
1.3、元素选择器 element
描述:根据给定的元素名匹配元素,返回元素集合
示例:$("p") 选取所有的
元素
1.4、*
描述:匹配所有元素,返回元素集合
示例:$("*") 选取所有的元素
3.前后端是如何做数据交互的?前端怎么传给后端json数据?
一、通过表单传递参数
前端怎么传给后端json数据?
二、通过ajax传递参数(有post和get写法)
前端向后端传递json数据时,需要使用JSON.stringify()
将json对象转化为json字符串。
Django后端接收前端传递过来的json数据,不能使用request.POST
而是要使用request.body
1.第一种:ajax
传给后台的数据通过json封装起来,再用ajax将json传到后台
2、通过form表单的action传值
一般情况下数值在传给后台之前需要校验,可以在form中的onsubmit调用js方法进行校验,当js方法返回值为true时,触发action,当js方法返回值为false时,action不触发。
这样处理的好处在于当用户输入不正确时,不会刷新页面,表单仍然会保留用户之前的输入
JS方法: JSON.stringfiy(demo);
4.前端和后台都是如何解决跨域问题的?
一个系统访问另一个系统才会存在跨域,同系统访问不存在跨.
跨域是指跨域名的访问,以下情况都属于跨域:
1.域名不同: www.jd.com 与 www.taobao.com
2.域名相同,端口不同: www.jd.com:8080 与 www.jd.com:8081
3. 二级域名不同: www.baidu.wenku.com www.baid.tieba.com
如果域名和端口都相同,但是请求路径不同,不属于跨域,如:
www.jd.com/item
www.jd.com/goods
只要域名(ip)和端口号有一样不同,那么都是跨域
http://localhost:8080 前端系统 发送Ajax取后端系统获取数据
http://localhost:80 后端系统
跨域不一定会有跨域问题。
因为跨域问题是浏览器对于ajax请求的一种安全限制:
一个页面发起的ajax请求,只能是于当前页同域名的路径,这能有效的阻止跨站攻击。
因此:跨域问题是针对ajax的一种限制。
- 1.Jsonp-- json变种
最早的解决方案,利用动态去填充script标签可以跨域的原理实现。
<sccipt src=”http:/wwww/ssss”>
限制:
需要服务的支持
只能发起GET请求
- 2.nginx反向代理(部署)
思路是:利用nginx反向代理把跨域变为不跨域,支持各种请求方式
原理是:前端的请求访问后端是跨域,nginx代理会让他的请求转回去访问自己,就不存在跨域问题了,而nginx会代理前端的请求发送一个和后端域名端口一致的请求,再返回数据,相当于避免了前端跨域的直接请求。
缺点:需要在nginx进行额外配置,语义不清晰 –
- 3.CORS(都可以使用-采纳)
规范化的跨域请求解决方案,安全可靠。
优势:
- 在服务端进行控制是否允许跨域,可自定义规则
- 支持各种请求方式
缺点:
- 会产生额外的请求,要做询问
前端
利用反向代理实现跨域
反向代理需要用到nginx
实现原理
原理大体相同,但是处理的端不同,反向代理实在服务器端进行处理。
首先修改hosts文件,将域名指向开发者的电脑本身,把自己伪装成服务端,
再通过nginx对不同的请求进行转发,把静态资源指向开发者本地电脑的资源,将接口指向实际的服务器。
后台
使用cors
5.前端如何防止表单重复提交?
一:前端利用JavaScript防止表单重复提交
1.设置submit按钮属性为disabled,然后当后台请求成功移除这个属性。
2.用flag标识,当表单被提交过一次后checkSubmitFlg将变为true,根据判断将无法进行提交。
二:利用Session防止表单重复提交
三:使用重定向也可以解决form表单重复提交问题
利用Session防止表单重复提交(推荐)
实现原理:
服务器返回表单页面时,会先生成一个subToken保存于session,并把该subToenk传给表单页面。
当表单提交时会带上subToken,服务器拦截器Interceptor会拦截该请求,拦截器判断session保存的subToken和表单提交subToken是否一致。
若不一致或session的subToken为空或表单未携带subToken则不通过。
首次提交表单时session的subToken与表单携带的subToken一致走正常流程,然后拦截器内会删除session保存的subToken。
当再次提交表单时由于session的subToken为空则不通过。从而实现了防止表单重复提交。
6.Vue的生命周期?
vue的指令?
vue的双向绑定如何实现?
vue如何实现自定义事件?
vue如何实现监听?
vue如何实现请求?
vue的路由跳转方式?
- Vue的生命周期?
vue生命周期是指vue实例对象从创建之初到销毁的过程,
vue生命周期可以分为八个阶段,
分别是:
beforeCreate(创建前),
created(创建后),
beforeMount(载入前),
mounted(载入后),
beforeUpdate(更新前),
updated(更新后),
beforeDestroy(销毁前),
destroyed(销毁后)
Vue的指令?
1. v-text
v-text主要用来更新textContent,可以等同于JS的text属性。
<span v-text="msg"></span>
这两者等价:
<span>{ {msg}}</span>
2. v-html
双大括号的方式会将数据解释为纯文本,而非HTML。为了输出真正的HTML,可以用v-html指令。它等同于JS的innerHtml属性。
<div v-html="rawHtml"></div>
这个div的内容将会替换成属性值rawHtml,直接作为HTML进行渲染。
3. v-pre
v-pre主要用来跳过这个元素和它的子元素编译过程。可以用来显示原始的Mustache标签。跳过大量没有指令的节点加快编译。
<div id="app">
<span v-pre>{ {message}}</span> //这条语句不进行编译
<span>{ {message}}</span>
</div>
最终仅显示第二个span的内容
4. v-cloak
这个指令是用来保持在元素上直到关联实例结束时进行编译。
javascript
<div id="app" v-cloak>
<div>
{ {message}}
</div>
</div>
<script type="text/javascript">
new Vue({
el:'#app',
data:{
message:'hello world'
}
})
</script>
在页面加载时会闪烁,先显示:
javascript
<div>
{ {message}}
</div>
然后才会编译为:
html
<div>
hello world!
</div>
5. v-once
v-once关联的实例,只会渲染一次。之后的重新渲染,实例极其所有的子节点将被视为静态内容跳过,这可以用于优化更新性能。
<span v-once>This will never change:{ {msg}}</span> //单个元素
<div v-once>//有子元素
<h1>comment</h1>
<p>{ {msg}}</p>
</div>
<my-component v-once:comment="msg"></my-component> //组件
<ul>
<li v-for="i in list">{ {i}}</li>
</ul>
123456789
上面的例子中,msg,list即使产生改变,也不会重新渲染。
6. v-if
v-if可以实现条件渲染,Vue会根据表达式的值的真假条件来渲染元素。
<a v-if="ok">yes</a>
如果属性值ok为true,则显示。否则,不会渲染这个元素。
7. v-else
v-else是搭配v-if使用的,它必须紧跟在v-if或者v-else-if后面,否则不起作用。
<a v-if="ok">yes</a>
<a v-else>No</a>
8. v-else-if
v-else-if充当v-if的else-if块,可以链式的使用多次。可以更加方便的实现switch语句。
<div v-if="type==='A'">
A
</div>
<div v-if="type==='B'">
B
</div>
<div v-if="type==='C'">
C
</div>
<div v-else>
Not A,B,C
</div>
vue 的双向绑定如何实现?
vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。
1.实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。
2.实现一个订阅者Watcher,每一个Watcher都绑定一个更新函数,watcher可以收到属性的变化通知并执行相应的函数,从而更新视图。
3.实现一个解析器Compile,可以扫描和解析每个节点的相关指令(v-model,v-on等指令),如果节点存在v-model,v-on等指令,则解析器Compile初始化这类节点的模板数据,使之可以显示在视图上,然后初始化相应的订阅者(Watcher)。
vue 如何实现自定义事件?
自定义事件
监听$on(eventName)
触发$emit(eventName)
基本使用方法如下
使用app.$on('text',function(){})来自定义一个事件,实例中我使用click点击事件来触发addn 中的 app.$emit('text')给事件传递参数'hi';
app.$on监听到text 执行打印 value
vue如何实现监听?
1.绑定keyup事件
2.watch监听数据变化
使用这个 属性,可以监视 data 中指定数据的变化,然后触发这个 watch 中对应的 function 处理函数
该方法可以不用绑定事件
Vue如何实现请求?
Vue 请求数据方式有:
vue-resource、axios、fetchJsonp三种。
其中,vue-resource 是 Vue官方提供的插件,axios 与 fetchJsonp 是第三方插件。
Lambda简介
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
vue的路由跳转方式?
router-link标签
this.$router.push跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面**
this.$router.replace跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)**
this.$router.go(n)向前或者向后跳转n个页面,n可为正整数或负整数**
生命周期:从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。
vue的指令:
v-text
v-text主要用来更新textContent,可以等同于JS的text属性。
v-if
v-if可以实现条件渲染,Vue会根据表达式的值的真假条件来渲染元素。
v-for
用v-for指令根据遍历数组来进行渲染
v-bind
v-bind用来动态的绑定一个或者多个特性。
3 vue的双向绑定如何实现?
1 数据双向绑定(v-model)配合vue中的data
vue如何实现自定义事件
使用 $on(eventName) 监听事件
使用 $emit(eventName) 触发事件
vue如何实现监听?
$watch
vue如何实现请求
axios
vue的路由跳转方式
router-link标签
ps : 区别
this.$router.push
跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面
this.$router.replace
跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)
this.$router.go(n)
向前或者向后跳转n个页面,n可为正整数或负整数
7.get和post有什么区别?
1、 GET主要用于从服务器查询数据,POST用于向服务器提交数据
2、 GET通过URL传递数据,POST通过http请求体传递数据
3、 GET传输数据量有限制,不能大于2kb,POST传递的数据量较大,一般大量的数据提交都是通过POST方式
- GET安全性较低,容易在URL中暴漏数据,POST安全性较高
Sphinx:
父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为data里面的数据即可
Sphinx:
子传父的实现方式就是用了 this.$emit 来遍历 getData 事件,首先用按钮来触发 setData 事件,在 setData 中 用 this.$emit 来遍历 getData 事件,最后返回 this.msg
1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4. Get执行效率却比Post方法好。Get是form提交的默认方法。
8. jquery如何获取当前日期?
```javascript
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>jquery当前日期</title>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(function(){
function show(){
var mydate = new Date();
var str = "" + mydate.getFullYear() + "年";
str += (mydate.getMonth()+1) + "月";
str += mydate.getDate() + "日";
return str;
}
$("input[type='button']").click(function(){
$("p").html("今天是 " + show());
});
});
</script>
</head>
<body>
<input type="button" value="看看现在的时间" />
<p></p>
</body>
</html>
var myDate = new Date();
var year=myDate.getFullYear(); //获取当前年
var month=myDate.getMonth()+1; //获取当前月
var date=myDate.getDate(); //获取当前日
var h=myDate.getHours(); //获取当前小时数(0-23)
var m=myDate.getMinutes(); //获取当前分钟数(0-59)
var s=myDate.getSeconds(); //获取当前秒
var now=year+'-'+getNow(month)+"-"+getNow(date)+" "+getNow(h)+':'+getNow(m)+":"+getNow(s);
9.如何给画面中所有的 checkbox标签添加一个事件?
javascript
$(function(){
var s = $("input[name='check']");//获取所有CheckBox标签
s.each(function(i) {//遍历标签
// alert(i);
$(this).click(function(){//绑定事件
if(this.checked==true){
alert(this.value);
}
});
});
})
var x = document.getElementByTagName("checkbox").
var i;
for (i = 0; i < x.length; i++) {
x[i].onclick
}
10. jquery怎么打开一个模态窗口?
javascript
$('#myform').on('submit', function(ev) {
$('#my-modal').modal({
show: 'false'
});
var data = $(this).serializeObject();
json_data = JSON.stringify(data);
$("#results").text(json_data);
$(".modal-body").text(json_data);
// $("#results").text(data);
ev.preventDefault();
});
SimpleModal是一个轻量级的jQuery插件,它提供了一个强大的界面模态对话框发展。
SimpleModal提供2个简单的方法来调用一个模式对话框。
(1)作为一个串连的jQuery函数,你可以调用一个jQuery元素modal()函数使用该元素的内容将显示一个模式对话框。
$("#element-id").modal();
(2)作为一个独立的功能,可以通过一个jQuery对象,一个DOM元素,或者一个普通的字符串(可以包含HTML)创建一个模态对话框。
$("#element-id").modal({options});
$.modal("<div><h1>SimpleModal</h1></div>", {options});
11.表单验证是如何实现的?
1.正则表达式
2.Vant-UI框架
用document获取输入框的value可以判断是否为空或者是否为数字
其他类型的校验 比如手机号 邮箱之类的可以用正则表达式校验
12. readonly和 disable有什么区别?
## 相同点
- readonly和disabled都是可以禁止用户更改表单中的内容。比如都设为true,则form属性将不能被编辑
## 不同点
- readonly只针对input(text/password)和textarea有效,而disabled对于所有的表单元素都有效,包括select,radio,checkbox等。
- 表单在使用GET或POST方式提交时,表单元素在使用了readonly后,值可以传递到后台;而表单元素在使用disabled后值不可以传递到后台。
- 所有控件都有disabled 属性,但是不一定有readonly属性;点击被readonly掉的按钮照样可以触发事件,但是被disabled掉的按钮就无法使用了不管上面有没有事件。
readonly并没有对input[type="button"]产生作用,按钮效果仍然在,并没有“不可用”;
而disabled直接对input[type="button"]的按钮效果产生作用,导致按钮不可点击。
disabled属性可以作用于所有的表单元素。
readonly只对可以输入的表单元素有效
13.如何画一个表格?如何合并单元格?
如何画一个表格?
1.css+html标签(td行、tr列)
2.latex 表格命令
如何合并单元格?
colspan是横向合并 rowspan是纵向合并
在<table></table>的标签内只要有几行就要写几个<tr></tr>,而<tr></tr>内又包含着<td></td>。
在th或者td中设置rowspan属性,用于合并两行的同一列单元格
14.如何获取一个文本框的内容?
1.用js获取文本框的值:(推荐使用方法1)
方法1:**var value = document.getElementById("textId").value** //textId为文的id,此时inputValue为输入框的值
方法2:var value = document.getElementsByClassName("textClass").value //注意:值为类名的元素值的集合
方法3:var value = document.getElementsByName("textName").value //注意:值为带有指定名称的对象值的集合
方法4:var value = document.getElementsByTagName("标签名对应值").value //注意:值为带有指定标签名的对象值的集合
2.用jquery获取文本框的值:(推荐使用方法1)
方法1:**var value = $("#textId").val()**
方法2:var value = $(".textClass").val() //注意:值为类名的元素值的集合
var textbox= document.getElementById("textbox");
var text = textbox.value;
15. Jquery如何获取form表单的值?
javascript
$("#subbtn").click(function(){
var data = {};
var t = $('form').serializeArray();
$.each(t, function() {
data [this.name] = this.value;
});
alert(JSON.stringify(data ));
});
把form表单的值序列化成一个Json对象,如{username:admin,password:123}
var params = $('#searchForm').serializeObject();
把form表单的值序列化成一个字符串,如username=admin&password=admin
var params = $('#searchForm').serialize();
将字符串转换为Json对象
JSON.parse(str)
16.前端如何延时调用一个函数?
setTimeout(code,millisec)
- **参数**
1、回调函数, 需要隔一定时间后执行的函数
2、每次调用间隔时间,单位是ms
WindowsetTimeout()方法
jQuerydelay()方法
17.如何取出树形结构的数据?前端如何显示树形结构数据?
先根遍历,中根遍历,后根遍历
迭代
递归
前端如何显示树形结构数据?
Z-tree
treeTable
首先先遍历所有的节点数据,生成id 和parent_id的关系,然后遍历id 和parent_id的关系,因此将子节点数据放入children 这个集合当中。
通过js遍历数据对象,拼接成dom字符串,插入到html中
18.js中的this在各种情况下的指向?
一、全局作用域或者普通函数自执行中this指向全局对象window
//全局作用域
console.log(this);//Window
//普通函数
function fn(){
console.log(this); //Window
}
fn(); //函数加括号调用叫函数自执行,函数自执行时,内部的this指向顶层对象/window
1234567
二、事件函数内部的this指向事件源:注意在事件函数中如果包含普通函数,普通函数自执行后,内部this还是指向window
//事件函数内部的this指向事件源
document.body.onclick = function(){
this.style.height = "1000px";
console.log(this); //body对象
function fn(){
console.log(this); //Window
}
fn(); //函数加括号调用叫函数自执行,函数自执行时,内部的this指向顶层对象/window
};
123456789
三、对象方法调用时,this指向调用的对象
let obj = {
name : "lanlan",
fn : function(){
console.log(this);
},
lacy : {
name : "didi",
fn : function(){
let num = 10;
console.log(this);
}
}
};
obj.fn(); //obj
obj.dudu.fn(); //lacy
情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,
这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
19.如何将数据保存到前端?
localStorage用于长久的保存整个网站的数据(string类型存储),保存的数据没有过期时间,直到手动删除,并且localStorage的属性是只读的(不过如果是在浏览器的隐私模式下,它是不可读取的)。
另外,如果你只想将数据保存在当前会话下,可以使用sessionStorage,数据将会临时保存,关闭窗口后则会被删除。
语法
javascript
保存数据:
localStorage.setItem("key","value");
读取数据:
var getData=localStorage.getItem("key");
删除数据:
localStorage.removeItem("key");
虽然cookie可以存储一些数据,但是仍然存储下面一些缺点
(1)cookie需要在客户端和服务器端之间来回传送,会浪费不必要的资源
(2)cookie的存储大小有限制,对于每个域,一般只能设置20个cookie,每个cookie大小不能超过4KB
(3)cookie的安全性,cookie因为保存在客户端中,其中包含的任何数据都可以被他人访问,cookie安全性比较低
Web存储机制
接下来,我们要说一下html5中的存储啦,主要是sessionStorage和localStrorage
由于sessionStorage对象是Storage的一个实例,所以存储数据时可以使用setItem()或者直接设置新的属性来存储数据
当我们要获取某个数据的时候,可以使用getItem来获取数据
于localStorage也是Storage的实例,可以像使用sessionStorage一样来使用它
20.如何实时刷新页面?
ajax
页面自动刷新:把如下代码加入<head>区域中
<meta http-equiv="refresh" content="5">
21.什么是http协议无状态协议?怎么解决http协议无状态协议?
http是无状态的协议,也是不安全的协议,
它的无状态是指对于事务处理没有记忆能力,缺少状态意味着后续的操作需要前面的信息。
解决办法:
1,通过cookie解决,
2,通过session会话保存。
HTTP无状态协议是指协议对于事务处理没有记忆能力。
缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
另一方面,在服务器不需要先前信息时它的应答就较快。
1、通过Cookies保存状态信息
通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端。
2、通过Session保存状态信息
Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当 程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
Session的实现方式:
1、使用Cookie来实现
服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。
当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。
2、使用URL回写来实现
URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。
Tomcat 对Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回 写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用 response.encodeURL() 。
重写和重载的区别
首先是重载,重载就是在同一个类当中有多个名称相同方法,但各个相同方法的参数列表不同(无关返回值类型)。如下,在test3中三个方法名相同的add方法,第一个是两个int类型的书相加,第二个是三个int相加,第三个是两个float相加,他们的参数个数不同或类型不同就构成了重载。
重写则发生在不同的类当中,并且两者要有继承关系,重写是方法名字和参数的列表是要完全一致的,重写的意义在于父类的方法已经不能满足时,子类重写为自己需要的。如下,在父类Test3中num方法是想做两数的加法运算,而在子类Test4中我想做两数的减法运算,则继承的num方法不能满足,则重写为test4中的num方法进行减法运算
值传递和引用传递的区别
1、按值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。简单来说就是直接复制了一份数据过去,因为是直接复制,所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了
2、按引用传递:引用传递其实就弥补了上面说的不足,如果每次传参数的时候都复制一份的话,如果这个参数占用的内存空间太大的话,运行效率会很底下,所以引用传递就是直接把内存地址传过去,也就是说引用传递时,操作的其实都是源数据