因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java一样对其传入参数的类型进行定,也对传入参数的个数没有要求。
js函数的参数与大多数其他语言中的函数的参数有所不同。js函数不介意传递进来多少个参数,也不在乎穿进来参数是什么数据类型。也就是是说,即便你定义的函数值接受两个参数,在调用这个函数时也未必一定要是两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。之所以会这样,原因是js中的参数在内部是用一个数组来运行的。函数接受到的永远是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。如果这个数组中不包含任何元素,无所谓;如果包含多个元素,也没问题。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给含糊的每一个参数。
详情请参考:https://www.cnblogs.com/jphoebe/articles/5141417.html这篇文章
本项目中的代码:
NavBar.vue中的代码:
<el-dropdown-menu slot="dropdown" class="user-dropdown">
<router-link class="inlineBlock" to="/">
<el-dropdown-item>
首页
</el-dropdown-item>
</router-link>
<el-dropdown-item divided>
<span style="display:block;" @click="logout">退出</span>
</el-dropdown-item>
</el-dropdown-menu>
logout() {
this.$store.dispatch('LogOut').then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug
})
},
user.js中的代码:
import { login, logout, getInfo, changeUser } from '@/api/login'
// 登出
LogOut({ commit, state }) {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
commit('SET_TOKEN', '')
commit('SET_ENTERPRISEID', '')
commit('SET_ENTERPRISETYPE', '')
commit('SET_SUPERTYPE', '')
commit('SET_ROLES', [])
commit('SET_USERID', '')
removeToken()
removeEnterpriseId()
removeEnterpriseType()
removeUserId()
removeUserTokenList()
resolve()
}).catch(error => {
reject(error)
})
})
},
login.js中的代码:
export function logout() {
return request({
url: '/user/logout',
method: 'post'
})
}
在该案例中,user.js中logout(state.token)调用login.js中的logout()方法,仍然都可以调用。