因為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()方法,仍然都可以調用。